Entity Framework 7 分组依据

Posted

技术标签:

【中文标题】Entity Framework 7 分组依据【英文标题】:Entity Framework 7 group by 【发布时间】:2015-06-05 13:32:49 【问题描述】:

我正在尝试运行以下代码,但是当我检查 SQL 分析器时,它看起来像是在表上运行了一个完整的选择,然后在它从数据库返回所有结果后进行分组。任何帮助表示赞赏。

 var result = _dbContext.LogEvent.GroupBy(x => x.EventLevel)
                                 .Select(g => new 
                                               
                                                  eventType = g.Key, 
                                                  total = g.Sum(i => i.Occurrences) 
                                              ) 
                                 .ToList();

【问题讨论】:

您可以发布您在分析器中看到的生成的 SQL 吗? 它只是执行“从 LogEvent 中选择 column1、column2、column3、column4”。 SQL 中没有分组或求和。 我希望看到,如果您执行类似_dbContext.LogEvent.AsEnumerable()..._dbContext.LogEvent.ToList()... 之类的操作,那么在编写查询时,应该会生成适当的SQL。您可以尝试以下方法:var query = = _dbContext.LogEvent.GroupBy(x => x.EventLevel).Select(g => new eventType = g.Key, total = g.Sum(i => i.Occurrences) ); Debug.Write(query.ToString()); 【参考方案1】:

更新:

下面链接的问题已关闭,计划用于 EF 2.1.0。您现在应该可以使用 Preview 包试用它了!


原答案:

It doesn't look like this is currently supported,但似乎有人看到了这篇文章并创建了链接问题。

这个概念是一个相当复杂的逻辑,EF7 处于非常早期的阶段。 .Net 的 GroupBy 不会直接转换为 SQL 的 GROUP BY,除非您只使用聚合或 Select 中的键来跟踪它。如果你有野心,你可以提供一个 pull request,或者continue to use EF6.

【讨论】:

是的,我认为它还没有完成。我正在查看源代码,有一些东西被注释掉了。我现在可以解决这个问题。谢谢。 将在 EF Core 2.1 中得到支持:blogs.msdn.microsoft.com/dotnet/2018/02/02/…【参考方案2】:

它可能不会很快得到支持 - 不幸的是。会引起很多挫折,因为很多人不阅读发行说明,并且很自然地认为它会像以前一样工作(EF6 / Linq2SQL)。

我意识到它对于涉及整个实体的更复杂的事情可能很复杂,但很遗憾它甚至不支持像你这样的简单查询:-(

https://blogs.msdn.microsoft.com/dotnet/2016/05/16/announcing-entity-framework-core-rc2/

【讨论】:

以上是关于Entity Framework 7 分组依据的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Entity Framework 7 记录查询?

JPA NamedQuery 与聚合函数和分组依据一起使用

重置 Entity Framework 7 迁移

Entity Framework Core 7.0 未来规划

如何在 Entity Framework 7 中为字符串属性创建索引

在 Entity Framework 7 中创建自引用多对多关系