假設標籤的表像計算器的問題標籤:LINQ中「最受歡迎」GROUP BY?
標籤識別(BIGINT),QuestionID(BIGINT),標籤(VARCHAR)
什麼是最有效的方式,以獲得25個最使用LINQ的標籤?在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。
所以我然後分析這些匿名類型回到標籤對象:
groups.OrderByDescending(g => g.Frequency).Take(25).ToList().ForEach(t => tags.Add(new Tag()
{
Tag = t.Tag,
Frequency = t.Frequency
}));
我是新手LINQ,這看起來不正確。請告訴我它是如何完成的。
我相信你的SQL應該是`SELECT標記,COUNT(標記)FROM標記GROUP BY標記ORDER BY COUNT(標記)DESC FETCH FIRST 25 ROWS ONLY`,這不會讓Linq看起來那麼糟糕。 – NetMage 2016-10-07 00:17:23