groupby と count を使用した LINQ 質問する

groupby と count を使用した LINQ 質問する

これはかなり単純ですが、困惑しています。このタイプのデータセットが与えられた場合:

UserInfo(name, metric, day, other_metric)

このサンプルデータセット:

joe  1 01/01/2011 5
jane 0 01/02/2011 9
john 2 01/03/2011 0
jim  3 01/04/2011 1
jean 1 01/05/2011 3
jill 2 01/06/2011 5
jeb  0 01/07/2011 3
jenn 0 01/08/2011 7

カウントの発生回数の合計とともに、メトリックを順序 (0、1、2、3...) でリストするテーブルを取得したいと思います。このセットから、次のようになります。

0 3    
1 2    
2 2    
3 1

LINQ 構文に取り組んでいますが、groupby と count をどこに置くべきかで行き詰まっています... 何か助けはありますか?

投稿編集: 投稿された回答は、常に異なるカウントの数を含む 1 つのレコードを返すため、機能しませんでした。ただし、機能する LINQ to SQL の例をまとめることはできました。

var pl = from r in info
         orderby r.metric    
         group r by r.metric into grp
         select new { key = grp.Key, cnt = grp.Count()};

この結果、'メトリック' とそれぞれに関連付けられたユーザー数を含む順序付けられたレコード セットが得られました。私は明らかに LINQ 全般に不慣れで、私の素人目には、このアプローチは純粋な LINQ アプローチと非常に似ているように見えますが、異なる答えが得られました。

ベストアンサー1

を呼び出すとGroupBy、一連のグループが取得されます。IEnumerable<Grouping>各 Grouping 自体は、Keyグループの作成に使用された を公開し、元のデータ セットに含まれる項目の も公開します。小計を取得するには、その Grouping をIEnumerable<T>呼び出すだけです。Count()

foreach(var line in data.GroupBy(info => info.metric)
                        .Select(group => new { 
                             Metric = group.Key, 
                             Count = group.Count() 
                        })
                        .OrderBy(x => x.Metric))
{
     Console.WriteLine("{0} {1}", line.Metric, line.Count);
}

> 非常に素早い返信でしたが、最初の行、具体的には「data.groupby(info=>info.metric)」に少し問題があります。

classすでに次のようなリスト/配列を持っていると仮定します。

class UserInfo {
    string name;
    int metric;
    ..etc..
} 
...
List<UserInfo> data = ..... ;

を実行すると、それは「によって定義される IEnumerable のdata.GroupBy(x => x.metric)各要素について、その を計算し、同じメトリックを持つすべての要素を にグループ化し、結果のすべてのグループの を返す」ことを意味します。 の例のデータ セットを考えると、xdata.metricGroupingIEnumerable

    <DATA>           | Grouping Key (x=>x.metric) |
joe  1 01/01/2011 5  | 1
jane 0 01/02/2011 9  | 0
john 2 01/03/2011 0  | 2
jim  3 01/04/2011 1  | 3
jean 1 01/05/2011 3  | 1
jill 2 01/06/2011 5  | 2
jeb  0 01/07/2011 3  | 0
jenn 0 01/08/2011 7  | 0

groupby の後には次の結果がもたらされます。

(Group 1): [joe  1 01/01/2011 5, jean 1 01/05/2011 3]
(Group 0): [jane 0 01/02/2011 9, jeb  0 01/07/2011 3, jenn 0 01/08/2011 7]
(Group 2): [john 2 01/03/2011 0, jill 2 01/06/2011 5]
(Group 3): [jim  3 01/04/2011 1]

おすすめ記事