从匿名类型重构为已定义的类型

时间:2016-03-24 10:22:54

标签: c# lambda

我的任务是重构一些代码,以便将其从匿名类型更改为定义良好的类型。但是,这个匿名类型是在lambda表达式中定义的,我不太确定如何设置它(我对使用lambda很新)。

这里是匿名类型的逻辑:

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; }
}

我想在entityID字段中存储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();

我收到一条错误消息,指出&#34; grp在当前环境中不存在&#34;。

1 个答案:

答案 0 :(得分: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();