我有以下列表项目,以便清楚地显示我可以看到下面的小列表,可能是数百行。
CourseId ClassName StartDate
-------- -------- --------
12321 Math 08-25-2017
32342 Physics 08-25-2017
34345 Chemistry 08-25-2017
25325 Math 01-25-2018
44345 Chemistry 01-25-2018
我要传递ClassName
和Date
来检索相应的对象。我很难如何在LINQ
Date
参数
public Course GetClassesByNameAndDate(string className, DateTime date, List<Courses> allCourses)
{
Course course = allCourses.Where( x=> x.ClassName == className & x.StartDate <= date );
}
例如,我实现的逻辑返回了两个类。但是,我只需要让startdate的项目更接近给定的日期。
如果我传递today date
并且课程名称为Math
,那么它应该从列表中返回25325 courseID
个对象。
即使有两门数学课程,但已开始01-25-2018
的课程是指定日期的最新课程。
在其他示例中,如果我给出日期01-01-2018
,那么它应该返回12321该对象。因为01-01-2018
早于25325
startdate,即01-25-2018。
答案 0 :(得分:6)
您可OrderBy()
或OrderByDescending()
,这是稳定排序,因此您可以使用FirstOrDefault()
或First()
allCourses.Where( x=> x.ClassName == className && x.StartDate <= date ).OrderByDescending(x=> x.StartDate ).FirstOrDefault();
答案 1 :(得分:0)
您可以按日期订购查询,并按照第一种方式进行查询:
Course course = allCourses.Where( x=> x.ClassName == className & x.StartDate <= date).OrderByDescending(x => x.StartDate).First();;
答案 2 :(得分:0)
如果我理解正确,您需要返回距离StartDate
参数最近的date
的课程。
如果是这样,您可以按日期之间的差异排序,然后选择顺序中的第一个。
public Course GetClassesByNameAndDate(string className, DateTime date, List<Courses> allCourses)
{
Course course = allCourses
.OrderBy( x => (x.StartDate - date).Duration() ) // use duration to turn negative TimeSpans into positive
.First( x=> x.ClassName == className & x.StartDate <= date );
}