代码之家  ›  专栏  ›  技术社区  ›  casillas

传递列表以查找项目列表

  •  -1
  • casillas  · 技术社区  · 6 年前

    我有以下列表项以便清楚地显示。我可以想象下面的小列表,可能是几百行。

    CourseId    ClassName    StartDate     EndDate
    --------    --------      --------  
    12321       Math         08-25-2017     null
    14321       Math         08-25-2017     01-05-2018
    32342       Physics      08-25-2017     null
    34345       Chemistry    08-25-2017     null
    25325       Math         01-25-2018     null
    45329       Math         01-25-2018     null
    33325       Math         01-25-2018     null    
    44345       Chemistry    01-25-2018     null
    

    我有一个清单 CourseId 但以下实现不返回任何内容

    public List<Courses> FindCourses(List<Guid> courseIds, DateTime date, List<Courses>allCourses)
    {
      return allCourses.Where(x => CourseId.ToString() == courseIds.ToString() && x.StartDate<= date && x.End_Date.HasValue ? x.End_Date.Value >= date : true).ToList();
    
    }
    

    课程编号 存储为 GUID .

    2 回复  |  直到 6 年前
        1
  •  3
  •   StriplingWarrior    6 年前

    我想这是你想要的,用 Contains 检查课程的ID是否在给定列表中。

    public List<Courses> FindCourses(List<string> courseIds, DateTime date, List<Courses>allCourses)
    {
      return allCourses.Where(x => courseIds.Contains(x.CourseId) && x.StartDate<= date && x.End_Date.HasValue ? x.End_Date.Value >= date : true).ToList();
    }
    

    (我把你的课程号改成了字符串,但是如果 int S或 Guid 你可以把它们变成什么 Course.CourseId 的类型是。

    您还可以稍微简化结束日期检查:

    public List<Courses> FindCourses(List<string> courseIds, DateTime date, List<Courses>allCourses)
    {
      return allCourses.Where(x => courseIds.Contains(x.CourseId) 
              && x.StartDate<= date 
              && x.End_Date.HasValue || x.End_Date.Value >= date)
          .ToList();
    }
    
        2
  •  1
  •   johnny 5    6 年前

    从你提供的例子来看,你使用了错误的类型。另外,您可能希望检查列表是否包含id,而不是调用列表中的to string(它只返回类型的名称),您很可能希望更接近这个(假设id是int而不是string)

    public List<Courses> FindCourses(List<int> courseIds, DateTime date, 
                                     List<Courses>allCourses)
    {
        return allCourses.Where(x => courseIds.Contains(CourseId) 
                                 && x.StartDate<= date 
                                 && x.End_Date.HasValue 
                                        ? x.End_Date.Value >= date : true)
                         .ToList();
    
    }