2017-07-20 10 views
0

プロパティでグループ化し、LINQを使用してリストとして他のプロパティを選択する方法は?Linq GroupByと他の属性をリストとして選択

私はここでそれを説明するの苦手は例です:のみすべてのこれらのオブジェクトの中

[ 
    { "id":123, "name":"John", "carId":1, "carAge":3 }, 
    { "id":123, "name":"John", "carId":2, "carAge":4 }, 
    { "id":4, "name":"Mary", "carId":3, "carAge":3 }, 
    { "id":4, "name":"Mary", "carId":4, "carAge":3 }, 
    { "id":123, "name":"John", "carId":5, "carAge":3 } 
] 

を:

私はこのようなJSONで表現することができますC#のオブジェクトのリストを持っているとしましょうcarIdはユニークです。

私はそれらを人の詳細でグループ化し、これらの詳細を接続された車の詳細と結合したいと考えています。

最終的な結果は次のようになりますが、C#のオブジェクトのようになります。

[ 
    {"id":123, "name":"John", 
     [ 
      {"carId":1, "carAge":3}, 
      {"carId":2, "carAge":4}, 
      {"carId":5, "carAge":3} 
     ] 
    }, 
    {"id":4, "name":"Mary", 
     [ 
      {"carId":3, "carAge":3}, 
      {"carId":4, "carAge":3} 
     ] 
    } 
] 

編集:

私はいずれかを必要としないので、私は

list.GroupBy(x => new { x.Id, x.Name }) 

後にこだわっています集約関数ではなく、選択のみ。

もっとコードを投稿しないことをお詫び申し上げます。これは単純化されたバージョンであり、実際にはより多くのフィルタリングと複雑なドメイン固有の用語があります。

すべてがメモリに格納されています.DBは必要ありません。

+6

あなたが試したことを示してください。私たちはそこから助けることができます。グループ化してプロジェクトをまとめる方法を知るには多くの情報源があります。 –

+2

[mcve]を指定すると、作業が簡単になります。これは、単純な 'GroupBy'操作のように見えます。ここでは、キーセレクタと要素セレクタを個別に分離していますが、コードで確実に言えるようになります。 –

+0

https://stackoverflow.com/questions/2280183/how-to-group-by-custom-types-with-linqが役立ちます。複合キーによるグループ分けのようです - 2つの値から必要なものです – Vladimir

答えて

3

group _ by _の各セクションには、必要なフィールドを持つ匿名オブジェクトが作成されます。

GroupByを使用する場合は、集計だけでなく特定のデータグループの操作について、それぞれのキーにネストされたコレクションを作成します。その1つのケースは集約メソッドです。あなたは、次のオーバーロードを使用することができますしようとしたとして

var result = from item in data 
      group new { item.carId, item.carAge } by new {item.id, item.name} into g 
      select g; 

もう一つの方法は、メソッドの構文を使用して

var result = from item in data 
      group by new {item.id, item.name} into g 
      select new { 
       g.Key, 
       Data = g.Select(i => new {i.carId, i.carAge}) 
      }; 

次のようになります。

var result = data.Group(k => new {k.id, k.name}, 
         e => new {e.carId, e.carAge}); 

かどうちょうどSelect用を追加

投影:

var result = data.Group(k => new {k.id, k.name}) 
       .Select(g => new { 
        g.Key, 
        Data = g.Select(i => new {i.carId, i.carAge}) 
       }); 
+0

@TadijaBagarić - あなたは歓迎です:) –

関連する問題