c#LINQ按对象列表属性的子属性对列表进行排序
我有一个c#LINQ按对象列表属性的子属性对列表进行排序,c#,linq,list,sorting,C#,Linq,List,Sorting,我有一个Order类,它由许多属性组成,其中一个属性是Course。 课程对象包含会议日的列表。 每个MeetingDay对象都包含许多属性,其中一个属性是StartDate 现在我想对订单列表进行排序(OrderBy),按照MeetingDay的StartDate属性对其排序 因为一个订单可以有几个会议日:我也有一个日期,我只想按每个订单的会议日排序,该排序等于日期参数 所以,如果一份订单从上午10点开始到下午2点结束,我希望它在我的列表中排序,然后是另一份从下午3点开始到下午6点结束的订单
Order
类,它由许多属性组成,其中一个属性是Course
。
课程
对象包含会议日的列表
。
每个MeetingDay
对象都包含许多属性,其中一个属性是StartDate
现在我想对订单列表进行排序(OrderBy
),按照MeetingDay
的StartDate
属性对其排序
因为一个订单可以有几个会议日
:我也有一个日期,我只想按每个订单的会议日
排序,该排序等于日期参数
所以,如果一份订单从上午10点开始到下午2点结束,我希望它在我的列表中排序,然后是另一份从下午3点开始到下午6点结束的订单
编辑
如果能做到这一点,那就太好了:
var sortedOrders = orders.OrderBy(x => x.Course.MeetingDays.StartDate.Date == date.Date).ToList();
这仅在一个会议日有效。开始日期匹配日期:
var sortedOrders = orders.OrderBy(x => x.Course.MeetingDays.Single(y => y.StartDate.Date == date.Date).StartDate).ToList();
由于(根据注释)您得到保证,每个订单
都包含一个与给定日期匹配的会议日期
,因此以下表达式将满足您的要求:
var sortedOrders = myOrders
.OrderBy(order => order
.Course
.MeetingDays
.Single(day => day.StartDate.Date == date.Date)
.StartDate)
.ToList();
如果出乎意料地出现零个或多个匹配的
MeetingDay
,则调用Single
时将引发异常。根据您的描述猜测,是否需要此工作myOrders.OrderBy(order=>order.Course.MeetingDays.First().StartDate)
?我更新了我的问题,因为一门课程可以包含几个会议日,但我只想在MeetingDate.StartDate等于日期参数的会议日进行排序。这听起来像是myOrders.OrderBy(order=>order.Course.MeetingDays.First)(day=>day.StartDate.Date==Date.Date).StartDate)
。myOrders
中的每个订单
是否保证包含与Date.Date
日期相同的会议日
通过指定会议日期。首先,它只在第一个会议日期排序?很好,那么上面的方法应该有效,如果有效,请告诉我:)