首页 > 解决方案 > 我如何根据“孙子”的日期对我的事件进行排序

问题描述

我们有一个 EF6 MVC3 codeFirst-site。我们的事件可能有一个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();

有什么建议么?

标签: c#lambdaentity-framework-6

解决方案


您需要SelectMany获取 one 的所有EventOccasions 的列表Event。选择他们的日期。此列表可以按日期排序(降序)。此列表中的第一个日期是事件的排序键。

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

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();

推荐阅读