我如何根据 "grandchildren's" 日期对我的事件进行排序

How do i sort my events with regards to "grandchildren's" date

我们有一个 EF6 MVC3 codeFirst 站点。我们的 Events 可能有一组 EventRallies。 EventRallies 可能有 EventOccasions

的集合

我想对它们进行排序,以便任何未来事件发生在顶部,其次是所有事件都是过去的事件,然后是没有任何集会或事件与之相关的事件。

以下尝试导致:System.ArgumentException:DbSortClause 表达式必须具有可比较顺序的类型 - 错误;)

return context.Events.Where(x => x.OrganizationId == id).
Include(x => x.EventRallies).
Include(x => x.EventRallies.Select(e => e.EventOccasions)).
OrderBy(x => x.EventRallies.OrderByDescending(d=>d.EventOccasions.FirstOrDefault().Date)).ToList();

有什么建议吗?

您需要 SelectMany 才能获得一个 Event 的所有 EventOccasion 的列表。 Select 他们的约会对象。该列表可以按日期(降序)排序。此列表中的第一个日期是事件的排序键。

如果您按此日期键降序排列,则未来的事件将排在第一位,然后是过去的事件,然后是没有任何场合的事件。

context.Events.Where(x => x.OrganizationId == id)
.Include(x => x.EventRallies)
.Include(x => x.EventRallies.Select(e => e.EventOccasions))
.OrderByDescending(x => x.EventRallies.SelectMany(d => d.EventOccasions)
    .Select(occ => occ.Date)
    .OrderByDescending(d => d)
    .FirstOrDefault()).ToList();