2016-03-24 14 views
1

私は匿名型から明確に定義された型に変更されるようにいくつかのコードをリファクタリングすることを任されています。しかし、この匿名型はラムダ式の中で定義されており、設定方法についてはあまりよく分かりません(ラムダを使うのは初めてです)。匿名型から定義済み型へのリファクタリング

var groupedData = exportData.GroupBy(x => x.Key.MetricInstance.EntityID) 
          .Select(grp => new 
              { 
               k = grp.Key, 
               v = grp.Select(x => new 
                    { 
                     trm = x.Key, 
                     tsd = x.Value 
                    }) 
                 .ToList()}) 
          .ToList(); 

問題のターゲットはそれぞれKとVの変数です:

は、ここで匿名型との論理です。 kはintであり、vは辞書である。私はこのデータを保持する新しいクラスを作成しました:

public class EntityMetricData 
{ 
    public int entityID { get; set; } 
    public Dictionary<TRInfo, List<TimeData>> entityMetrics { get; set; } 
} 

私はどのように私はこれをやって行くことができる、実体識別子フィールド内のkの値と辞書内のvの値を保存したいと思いますか?私はこのような何かを試してみたが、それはコンパイルされません:

var grouping = csvData.GroupBy(x => x.Key.MetricInstance.EntityID) 
         .Select(grp => new EntityMetricData emd 
            { 
             emd.entityID = grp.Key, 
             emd.entityMetrics = grp.Select(x => new 
                      { 
                      trm = x.Key, 
                      tsd = x.Value 
                      }) 
                   .ToList() }) 
         .ToList(); 

私は「GRPは、現在のコンテキスト内に存在しない」というエラーを取得します。

+4

削除は '' TRInfo'と 'TimeData'は何どこでも – adrianm

+0

emd'?あなたの元のデータは 'entityMetrics'のキー/値のリストを持っていましたが、リファクタリングされたものは' Dictionary > 'に変更しました - そこに明白な対話はありません – Jamiec

答えて

1

あなたはemd変数は必要ありません。

var grouping = csvData 
    .GroupBy(x => x.Key.MetricInstance.EntityID) 
    .Select(grp => new EntityMetricData { 
    entityID = grp.Key, 
    entityMetrics = grp 
     .Select(x => new { 
      trm = x.Key, 
      tsd = x.Value }) 
     .ToList() }) 
    .ToList(); 
+2

それはあなたがそれを必要としません:無効なコードです。 –

+1

誰も無効なコードを必要としません! –

関連する問題