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);
本当に?これは非常に冗長ではありませんか?悲しいことに、大量のクエリを節約するためにこれを行っていることです。実際にプロパティを使用した場合、タグ オブジェクトごとにデータベースで確認する必要がある Frequency プロパティが既に含まれているためです。
そこで、これらの匿名型を解析して Tag オブジェクトに戻します。
groups.OrderByDescending(g => g.Frequency).Take(25).ToList().ForEach(t => tags.Add(new Tag()
{
Tag = t.Tag,
Frequency = t.Frequency
}));
私は LINQ の初心者ですが、これは正しくないようです。実際にどうやって作ったのか見せてください。