【问题标题】:Convert a list of objects into a list of new generic objects who contain a list property将对象列表转换为包含列表属性的新通用对象列表
【发布时间】:2016-06-08 16:43:48
【问题描述】:

我有一个对象列表,其中对象的属性之一是日期字符串,如果在 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 参数分组,希望我不需要创建新类型而是可以使用泛型。这样,新列表将如下所示:

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();

【问题讨论】:

  • groupBy 返回一个二维键列表,其中包含每个键的值列表。要获取单个值,您需要使用两个 Select 方法 .Select(grp => grp).Select(item => ........
  • 在典型情况下,我可以接受 GroupBy 返回数据的方式。在这种情况下,我需要将数据结构与中间示例类似。
  • @jdweng 你能举例说明你的意思吗?

标签: c# .net linq list


【解决方案1】:

我假设你有一个类 Measurements

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&lt;Measurements&gt;(){.....} 最重要的是尝试以下查询

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-07
    • 2019-12-16
    • 2021-11-02
    • 1970-01-01
    • 2021-02-15
    • 2013-12-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多