2012-07-19 37 views

回答

119

查詢語法

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() }); 
10

一個有用的擴展是收集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); 

這裏最初發現: http://www.snippetsource.net/Snippet/140/groupby-and-count-with-ef-in-c

14

重要:實體框架7(現更名爲實體框架核心1.0/2.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

+5

感謝您的平視 – 2016-12-09 20:13:01

+4

同樣在1.1 – 2016-12-09 20:14:15

+4

或1.2或2.0沒有分組。我放棄了 – 2017-09-13 00:49:24