2016-07-28 14 views
1

私は以下のテーブル構造を持っています。私は各グループ名のキーに対応する値を取得し、それをモデルクラスに順に格納します。C#linqを使用して列を行に変換しますか?

ExecuteQueryを使用してテーブルデータが読み込まれ、クラスオブジェクトのリストに格納されています。 4行が返されます。私はそれを2行に変換する必要があります。列の値は行として入力されます。

Table Data Structure
私は今、書かれた次のコードを持っている、しかし、明示的にKey == "GroupSpecificProperty1"発言をチェックせずにそれを検証するための他の方法はありますか?

後で追加第三のカテゴリーがあれば、私はこのコード

Result = results.GroupBy(p => p.GroupName) 
       .Select(g => new FinalModel() 
    { 
     GroupName = g.Select(p => p.GroupName).FirstOrDefault(), 
     GroupSpecificProperty1 = g.Where(q => q.Key == "GroupSpecificProperty1").Select(v => v.Value).Cast<string>().FirstOrDefault(), 
     GroupSpecificProperty2= g.Where(q => q.Key == "GroupSpecificProperty2").Select(v => v.Value).Cast<string>().FirstOrDefault(), 
    }).ToList(); 
+0

トピックを別の質問で書いている可能性はありますか?行が '行を行に変換する '部分がどこにあるかを調べる – C4u

+1

第3カテゴリが追加されている場合は、動的な型に置き換えたい場合を除き、 'FinalModel'を修正する必要があります。それまたは 'FinalModel'は' Dictionary 'を含むことができます。 – juharr

+0

Hmm良い点、私が書いた方法以外の結果を達成するための他の方法がありますか? – KeenUser

答えて

3
results.GroupBy(p => p.GroupName) 
      .Select(g => new FinalModel 
      { 
       GroupName = g.Key, 
       Properties = g.ToDictionary(item => item.Key, item=> item.Value) 
      }); 

そして、与えられたGroupNameのためのキーが一意でないと、あなたがしたいという場合を変更する必要はありませんあなたができる例外を「すでに存在するキー」を避けたい:それはもっと自分のニーズに合った場合

results.GroupBy(p => p.GroupName) 
     .Select(g => new FinalModel 
     { 
      GroupName = g.Key, 
      Properties = g.GroupBy(item => item.key) 
          .ToDictionary(innerGroup => innerGroup.Key, 
             innerGroup => innerGroup.Select(innerItem => innerItem.Value)) 
     }); 

その後、もちろん、あなたはまた、ルックアップして、内側/外側の辞書を置き換えることができます。

関連する問題