首页 > 解决方案 > 使用 groupBy 将数据从 Linq-to-XML 保存到对象列表

问题描述

我有一个具有这种结构的 XML:

<weatherdata>
    <datapoint>
        <location>London</location>
        <rainfall>14</rainfall>
    </datapoint>
......
</weatherdata>

我想将按位置分组的平均降雨量保存到数据点对象列表中。Datapoint 对象具有 Location 和 AvgRainfall 属性。

List<Datapoint> datapointList = new List<Datapoint>();
var q = xdoc.Element("weatherdata").Elements("datapoint")
       .GroupBy(e => e.Element("location").Value);

IEnumerable<Datapoint> d = xdoc.Element("weatherdata").Elements("datapoint")
  .GroupBy(e => e.Element("location").Value)
  .Select(x => new Datapoint
   {
      RegionName = x.Key,
      AvgRainfall = x.Select(e => e.Elements("rainfall")
                 .Average(f => double.Parse(f.Value)))
   });

问题是,AvgRainfall 属性是双精度的,但 x.Select 返回一个 IEnumerable - 双精度列表。请指出我正确的方向。

编辑:这个解决方案对我的问题很有效:

AvgRainfall = x.Elements("rainfall").Average(f => double.Parse(f.Value)) 

标签: c#group-bylinq-to-xmlaverage

解决方案


尝试这个:

AvgRainfall = x.SelectMany(e => e.Elements("rainfall").Select(f => f.value))
             .Average(g => double.Parse(g))

SelectMany从多个集合返回特定元素的列表。


推荐阅读