Dot-Net

LINQ 中“最受歡迎”的 GROUP BY?

  • October 30, 2008

假設有一個標籤表,如 stackoverflow 問題標籤:

TagID (bigint), QuestionID (bigint), Tag (varchar)

使用 LINQ 獲取 25 個最常用標籤的最有效方法是什麼?在 SQL 中,一個簡單的 GROUP BY 就可以:

SELECT Tag, COUNT(Tag) FROM Tags GROUP BY Tag

我寫了一些有效的 LINQ:

var groups = from t in DataContext.Tags
            group t by t.Tag into g
            select new { Tag = g.Key, Frequency = g.Count() };
return groups.OrderByDescending(g => g.Frequency).Take(25);

像,真的嗎?這不是超級冗長嗎?可悲的是,我這樣做是為了保存大量查詢,因為我的 Tag 對像已經包含一個 Frequency 屬性,否則如果我實際使用該屬性,則需要用數據庫檢查每個 Tag。

所以我然後將這些匿名類型解析Tag 對象:

groups.OrderByDescending(g => g.Frequency).Take(25).ToList().ForEach(t => tags.Add(new Tag()
{
   Tag = t.Tag,
   Frequency = t.Frequency
}));

我是 LINQ 新手,這似乎不對。請告訴我它是如何真正完成的。

我很確定你做對了。而且,LINQ 生成並將發送到您的數據庫的 SQL 看起來就像您開始使用的 SQL,所以當您進行更多的輸入時,您的數據庫並沒有做更多的工作。

如果你想要 Tag 對象,為什麼不直接從你的 Linq 查詢中創建它們呢?

var groups = from t in DataContext.Tags
            group t by t.Tag into g
            select new Tag() { Tag = g.Key, Frequency = g.Count() };

return groups.OrderByDescending(g => g.Frequency).Take(25);

引用自:https://stackoverflow.com/questions/250867