You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Linq-to-XML按地点分组存储平均降雨量至对象列表

问题分析与解决方案

你遇到的问题核心是Linq查询中多套了一层Select,导致返回值类型不匹配。咱们一步步拆解:

错误原因

原代码里的这段逻辑:

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

这里的x是按地点分组后的IGrouping<string, XElement>对象,你用x.Select()会遍历组内的每个datapoint元素,对单个datapoint单独计算降雨量平均,最终返回的是IEnumerable<double>集合——但你的AvgRainfall是double类型,自然会出现类型不匹配的问题。

正确写法

你后来找到的解决方案完全正确,直接对整个分组内的所有rainfall元素求平均即可:

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

这里的逻辑很清晰:

  • 按地点分组后,每个分组x包含该地点的所有datapoint元素
  • x.Elements("rainfall")会提取这个分组里所有datapoint下的rainfall元素
  • 直接对这些元素解析成double后求平均,得到的就是该地点的总平均降雨量,类型正好是double,完美匹配AvgRainfall属性。

补充说明

就算某个datapoint下存在多个rainfall元素(你的XML示例里每个只有一个),这个写法依然有效——它会把该地点所有datapoint里的所有rainfall值汇总后求平均,完全符合按地点计算平均降雨量的需求。

内容的提问来源于stack exchange,提问作者Orumiya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:28:33