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
日期相同的
会议日
通过指定会议日期。首先,它只在第一个会议日期排序?很好,那么上面的方法应该有效,如果有效,请告诉我:)