【问题标题】:LINQ to Entities: Group then Order ByLINQ to Entities:分组然后排序
【发布时间】:2015-06-09 09:55:14
【问题描述】:

根据我的阅读,我可以使用 LINQ 到第一个组,然后使用“SelectMany”对每个组进行排序,如下所述:How to group a IQueryable by property 1 but order by property 2?

但我猜这对 IQueryable 不起作用。

我们基本上得到一个带有 Main-Entity 和 IEnumable 实体的 BusinessObject,所以我想先按 Main-Entity 序列,然后按子实体的每个名称。

所以我猜我的查询在 LINQ to objects 中看起来像这样:

            var qry = GetQueryFromSomeWhere();
            qry = qry.OrderBy(f => f.MainEntity.SequenceNumber)
                .ThenBy(f => f.SubEntities.SelectMany(f => f.Name)); 

我可以在查询服务中订购此名称,但应该由消费者根据需要订购实体。

是否有可能在不加载内存中的所有实体的情况下以某种方式完成这项工作?

【问题讨论】:

  • GetQueryFromSomeWhere() 返回什么?我认为要得到你想要的,它应该返回 List
  • 不,Service 故意返回一个带有一些“通用”业务对象的 IQueryable,客户端可以使用这些业务对象进行过滤、排序等。

标签: c# linq entity-framework


【解决方案1】:

如果我正确理解您想按记录名称对每个组内的记录进行排序。我认为您可以通过在进行分组之前对记录进行排序来完成此操作,请尝试以下代码:

var q = from m in MainEntities
join s in SubEntities on m.Id equals s.MainId
orderby m.SequenceNumber, s.Name
group new { m, s } by m into grp
orderby grp.Key.SequenceNumber
select grp;

【讨论】:

  • GetQueryFromSomeWhere() 提供了一个已经分组的 IQueryable,正如我所写的那样,我可以在那里进行排序,但这会隐藏一些我不喜欢的逻辑。但根据你的回答,这是唯一的方法,所以我想必须这样做并正确评论函数。
  • 我想知道这是否真的适用于所有 SQL 提供程序 - SQL 是否保证 GROUP BY 将保留以前的 ORDER BY
猜你喜欢
  • 1970-01-01
  • 2012-04-22
  • 1970-01-01
  • 1970-01-01
  • 2016-05-30
  • 2021-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多