c# LINQ根据对象列表属性的子属性对列表进行排序

本文关键字:列表 属性 排序 对象 LINQ | 更新日期: 2023-09-27 18:10:48

我有一个Order类,它由许多属性组成,其中一个是CourseCourse对象包含MeetingDays列表。每个MeetingDay对象包含许多属性,其中一个是StartDate

现在我想排序(OrderBy)的顺序列表,排序它的MeetingDayStartDate属性。

因为一个订单可以有几个MeetingDays:我也有一个日期,我只想按MeetingDay排序每个订单等于日期参数。

因此,如果一个订单从上午10点开始到下午2点结束,我希望它在我的列表中排序在另一个订单从下午3点开始到下午6点结束之前。

编辑

如果可以这样做就好了:

var sortedOrders = orders.OrderBy(x => x.Course.MeetingDays.StartDate.Date == date.Date).ToList();

c# LINQ根据对象列表属性的子属性对列表进行排序

由于(根据注释)您可以保证,每个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();