SQL到entity framework计数分组依据

我需要将这个SQL语句翻译成Linq-Entity查询…

 SELECT name, count(name) FROM people GROUP by name 

查询语法

 var query = from p in context.People group p by p.name into g select new { name = g.Key, count = g.Count() }; 

方法语法

 var query = context.People .GroupBy(p => p.name) .Select(g => new { name = g.Key, count = g.Count() }); 

重要: entity framework7 (现在更名为entity framework核心1.0 )还不支持GroupBy()在生成的SQL中转换为GROUP BY (即使在最终的1.0版本中也不会)。 任何分组逻辑将运行在客户端,这可能会导致大量的数据被加载。

最终,像这样写的代码会自动启动使用GROUP BY,但是现在,如果将整个未分组数据集加载到内存中,则需要非常谨慎,这会导致性能问题。

对于这是一个交易断路器的情况下,你将不得不手写SQL,并通过EF来执行。

如果有疑问,请启动Sql Profiler并查看生成的内容 – 无论如何,您应该这样做。

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

一个有用的扩展是收集在一个Dictionary的结果快速查找(例如在一个循环中):

 var resultDict = _dbContext.Projects .Where(p => p.Status == ProjectStatus.Active) .GroupBy(f => f.Country) .Select(g => new { country = g.Key, count = g.Count() }) .ToDictionary(k => k.country, i => i.count); 

最初在这里find: http : //www.snippetsource.net/Snippet/140/groupby-and-count-with-ef-in-c