将对象列表转换为包含list属性的新通用对象列表

时间:2016-06-08 16:43:48

标签: c# .net linq list

我有一个对象列表,其中对象的一个​​属性是日期字符串,如果在JSON中,它将如下所示:

// this is a List<Measurements>

measurements: [
    {
      "Timestamp": "6/7/2016 10:25:27 AM",
      "FactoryTimestamp": "6/7/2016 10:25:27 AM",
      "ValueInMgPerDl": 265,
      "TrendArrow": 4
    },
    {
      "Timestamp": "6/7/2016 10:24:27 AM",
      "FactoryTimestamp": "6/7/2016 10:24:27 AM",
      "ValueInMgPerDl": 301,
      "TrendArrow": 5
    },
    {
      "Timestamp": "6/6/2016 11:24:27 PM",
      "FactoryTimestamp": "6/6/2016 11:24:27 PM",
      "ValueInMgPerDl": 102,
      "TrendArrow": 2
    },
    {
      "Timestamp": "6/6/2016 11:23:27 PM",
      "FactoryTimestamp": "6/6/2016 11:23:27 PM",
      "ValueInMgPerDl": 99,
      "TrendArrow": 2
    }
]

我试图创建一个新的对象列表,在这个列表中,Timestamp param对它们进行分组,希望我不需要创建新类型但是可以而是使用通用。这样,新列表看起来像这样:

measurementGroups [
      {
        "date": "6/7/2016 10:25:27 AM",
        "measurementData" : [
          {
            "Timestamp": "6/7/2016 10:25:27 AM",
            "FactoryTimestamp": "6/7/2016 10:25:27 AM",
            "ValueInMgPerDl": 265,
            "TrendArrow": 4          
          },
          {
            "Timestamp": "6/7/2016 10:24:27 AM",
            "FactoryTimestamp": "6/7/2016 10:24:27 AM",
            "ValueInMgPerDl": 301,
            "TrendArrow": 5
          }
        ]
      },
      {
        "date": "6/6/2016 11:24:27 PM",
        "measurementData" : [
          {
            "Timestamp": "6/6/2016 11:24:27 PM",
            "FactoryTimestamp": "6/6/2016 11:24:27 PM",
            "ValueInMgPerDl": 102,
            "TrendArrow": 2         
          },
          {
            "Timestamp": "6/6/2016 11:23:27 PM",
            "FactoryTimestamp": "6/6/2016 11:23:27 PM",
            "ValueInMgPerDl": 99,
            "TrendArrow": 2
          }
      }
    ]

我尝试使用Linq完成此操作,就像我在下面显示的那样,但是那只返回了按日期分组的列表列表。我能用Linq实现我的目标,还是我需要采取另一种方法?

// Current attempt using linq
 var measurementGroupList = measurements
         .GroupBy(d => Convert.ToDateTime(d.Timestamp).Date)
         .Select(grp => grp.ToList())
         .ToList();

1 个答案:

答案 0 :(得分:1)

我假设您有一个测量类

public class Measurements
{
    public DateTime Timestamp { get; set; }
    public DateTime FactoryTimestamp { get; set; }
    public int ValueInMgPerDl { get; set; }
    public int TrendArrow { get; set; }
}

var MeasurementsList = new List<Measurements>(){.....} 并在此之上尝试以下查询

    var measurementGroupList= MeasurementsList.GroupBy(s => s.Timestamp).Select(grp => new { date = grp.Key, measurementData = grp.Select(s => s) }).ToList();