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