web-dev-qa-db-ja.com

Group By Linqを使用したカウント

次のようなオブジェクトがあります。

Notice 
{
    string Name,
    string Address 
}

List<Notice>すべての個別の名前と、特定の名前がコレクションに表示される回数を出力したい。

例えば:

Notice1.Name="Travel"
Notice2.Name="Travel"
Notice3.Name="PTO"
Notice4.Name="Direct"

出力が欲しい

Travel - 2
PTO - 1
Direct -1

私はこのコードで明確な名前を得ることができますが、1つのlinqステートメントですべてを数えることはできないようです

  theNoticeNames= theData.Notices.Select(c => c.ApplicationName).Distinct().ToList();
31
Nick LaMarca
var noticesGrouped = notices.GroupBy(n => n.Name).
                     Select(group =>
                         new
                         {
                             NoticeName = group.Key,
                             Notices = group.ToList(),
                             Count = group.Count()
                         });
56

GroupByの異なるオーバーロード を使用したLenielの回答のバリエーション

var query = notices.GroupBy(n => n.Name, 
                (key, values) => new { Notice = key, Count = values.Count() });

基本的に、Select呼び出しを省略します。

48
Jon Skeet