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