c# - 我如何根据“孙子”的日期对我的事件进行排序
问题描述
我们有一个 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();
有什么建议么?
解决方案
您需要SelectMany
获取 one 的所有EventOccasion
s 的列表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();
推荐阅读
- python - 根据 1-2 个公共键值获取 4 个 JSON 文件的交集?(Python)
- python - 用列名填充 NaN 的 Python Dataframe 问题
- floating-point - 为什么从 int 到 float “可以四舍五入”,但从 int 到 double “可以保留”?
- command-line-interface - 为部署和开发环境交换变量的独立于框架的方法
- citrix - Citrix 云与 VMware 本地登录问题
- python - ZeroMQ 在套接字绑定到 ipc:// 协议地址时抛出 ZMQError (python)
- postgresql - ON CONFLICT 子句,如何用 DO UPDATE 替换 DO NOTHING?
- r - R中的模型语法:如何输入动态变量?
- docker - 将本地机器 docker-compose 移动到 GKE,哪些 GCP 服务用于持久化卷?
- ios - 我可以将 obj 和材质都加载为 MDLAsset 吗?