2017-02-04 5 views
1

とグループ化レコードを作成しようとすると:今、私は私は1つのリストで、このようなレコードを持ってLINQ

var list = new List<Stats>();//this variable hold all above records. 

Id  Title  Name  Basic  Message 
10  Stats2 abc  10   sldjs 
10  Stats2 pqr  20   sldjs 
10  Stats2 xyz  30   sldjs 
10  Stats2 abc  40   sldjs 


11  Stats3 aaa  0   sldjs 
11  Stats3 bbb  0   sldjs 
11  Stats3 ccc  0   sldjs 
11  Stats3 ddd  0   sldjs 

私は、レコードの下に保持するクラスのList型の変数を持っていますリスト変数から以下のようなレコードを作成しようとしている:

[0]:Stats2: 
     abc   
      10 sldjs 
      40 sldjs 
     pqr 
      20 sldjs 
     xyz 
      30 sldjs 

[1]:Stats3: 
     aaa   
      0 sldjs 
     bbb 
      0 sldjs 
     ccc 
      0 sldjs 
     ddd 
      0 sldjs 

これは私がしようとしたが、内側のneを作成する方法を取得しておりませんどのようにされて(上に示し2 ABCレコード)のようなSTED子供:

var data =list.GroupBy(ed =>ed.Id) 
       .Select 
       (

       ) 

答えて

2

あなたは、同様のグループに内側のレコードを必要とします。結果はDictionary<int, Dictionary<string, List<Stats>>>のようなものになります。外側の辞書のキーはID値と内側のキーName値になると値がTitleNameことを持つStatsのリストを次のようになります。あなたがそのような結果の値にアクセスすることができます

var result = list.GroupBy(rec => rec.ID) 
       .ToDictionary(
        group => group.Key, 
        group => group.GroupBy(stat => stat.Name) 
            .ToDictionary(g => g.Key, g => g.ToList()) 
          ); 

result[10]["abc"] 

上記の例では、Basic 10及び40

012と Statsを含むリストであろう

あなたが唯一の最終レコード内BasicMessageを維持したい場合は、匿名型にStatsを投影するSelectを使用することができます。

var result = list.GroupBy(rec => rec.ID) 
       .ToDictionary(
        group => group.Key, 
        group => group.GroupBy(stat => stat.Name) 
            .ToDictionary(g => g.Key, g => g.Select(stat => new {stat.Title, stat.Basic, stat.Message}).ToList()) 
          ); 
+0

あなたの最初のグループは、タイトルではなくIDでなければならないと思いますか? –

+0

@学習あなたの質問にあなたが示す結果が期待される場合はありません。あなたのサンプルの結果は 'Title'でグループ化され、次に' Name'によってグループ化され、決して 'ID'によってグループ化されません。 –

+0

@ラーニング私は、少なくともあなたのサンプルデータでは、これらのグループは同じであることに気付きました。すべての 'Stats2'は' ID'を持っていますが、これがあなたの元のデータに常に当てはまるかどうかはわかりません。しかし、あなたの例の結果では、 'Title'をキーとして使用しました。 –

2
var data =list.GroupBy(p => p.Title).Select(p => new 
      { 
       Title = p.Key, 
       Items = p.GroupBy(q => q.Name) 
         .ToDictionary(q => q, q => new { q.Basic, q.Message }) 
      }); 
+0

いけないあなたがすることによってあなたの最初のグループではなく、IDにあるべきことだと思いますタイトルの? –

+0

@Learning、あなたの出力に基づいて、あなたはTitleで結果をグループ化しました。 –

+0

私を助けるためのあなたの親切な努力のためにUpvotedしかし、私は同じタイトルStats2でid 12のレコードを持っていると仮定して懸念を持っている3つの結果があります:[0]:Stats2 [1]:Stats3 [2]:Stats2 –

関連する問題