2016-03-24 4 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(); 

Мишень в вопросе К- и V переменных соответственно. k - это int, а v - словарь. Я создал новый класс для хранения этих данных:

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

Я хотел бы хранить значение к внутри поля EntityId и значение 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

Remove 'emd' везде – adrianm

+0

Что такое' 'TRInfo' и TimeData'? У ваших исходных данных был только список ключей/значений для 'entityMetrics', но рефакторированный изменяет его на' Словарь > '- там нет очевидной связи – 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

Некому нужен неверный код! –

Смежные вопросы