c# LINQ根据对象列表属性的子属性对列表进行排序
本文关键字:列表 属性 排序 对象 LINQ | 更新日期: 2023-09-27 18:10:48
我有一个Order
类,它由许多属性组成,其中一个是Course
。Course
对象包含MeetingDays
列表。每个MeetingDay
对象包含许多属性,其中一个是StartDate
。
现在我想排序(OrderBy
)的顺序列表,排序它的MeetingDay
的StartDate
属性。
因为一个订单可以有几个MeetingDays
:我也有一个日期,我只想按MeetingDay
排序每个订单等于日期参数。
因此,如果一个订单从上午10点开始到下午2点结束,我希望它在我的列表中排序在另一个订单从下午3点开始到下午6点结束之前。
编辑
如果可以这样做就好了:
var sortedOrders = orders.OrderBy(x => x.Course.MeetingDays.StartDate.Date == date.Date).ToList();
由于(根据注释)您可以保证,每个order
包含与给定日期匹配的MeetingDay
,因此以下表达式将完成您想要的:
var sortedOrders = myOrders
.OrderBy(order => order
.Course
.MeetingDays
.Single(day => day.StartDate.Date == date.Date)
.StartDate)
.ToList();
如果有0个或多个匹配的MeetingDay
,则在调用Single
时抛出异常。
这只适用于恰好有一个MeetingDay。StartDate匹配日期:
var sortedOrders = orders.OrderBy(x => x.Course.MeetingDays.Single(y => y.StartDate.Date == date.Date).StartDate).ToList();