传递列表以查找项目列表

时间:2018-06-04 18:29:53

标签: c# linq

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

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();

}

CourseId存储为GUID

2 个答案:

答案 0 :(得分:3)

我认为这更符合您的需求,使用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();
}

(我将您的课程ID更改为字符串,但如果他们是intGuid s或其他任何内容,您可以将其更改为Course.CourseId类型的任何内容。)< / p>

您还可以稍微简化EndDate检查:

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();
}

答案 1 :(得分:1)

从您提供的示例来看,您使用的是错误的类型。你也可能想检查列表是否包含id,而不是在列表上调用ToString,它只返回类型的名称,你很可能想要更接近这个(假设Ids是一个int而不是一个字符串)

var path = window.location.href;