C# 传递列表以查找项目列表

C# 传递列表以查找项目列表,c#,linq,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

为了清晰显示,我有以下列表项。我可以想象下面的小列表,可能是数百行

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

}
公共列表查找课程(列表课程ID、日期时间日期、列表所有课程)
{
返回allCourses.Where(x=>CourseId.ToString()==courseIds.ToString()&&x.StartDate=date:true);
}

CourseId
存储为
GUID

我认为这更符合您的要求,使用
包含
检查课程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,而不是在列表上调用ToString,因为它只返回类型的名称,您很可能需要更接近于此的内容(假设id是int而不是字符串)

公共列表查找课程(列表课程ID、日期时间日期、,
列表(所有课程)
{
返回allCourses.Where(x=>courseIds.Contains(CourseId)
&&x.StartDate=日期:真)
.ToList();
}

您将CourseId列表作为Guid列表,但列表中的CourseId不是Guid。这是正确的吗?courseIds.ToString()是一个GUID列表,表中的ID是INTS。因此,您对列表中字符串的调用可能只返回类型名称,您可能希望在其中使用contains,而不是
courseIds。ToString()
可能是问题所在。这个
ToString()
返回完全限定的类型名,不管列表中包含什么。CourseId存储为GUID,因为很难复制和粘贴长GUID,我只是模仿了一下。
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();
}
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();

}