LINQ分组查询:按AgeRangeCode汇总Population并获取其他列(查询异常)
问题分析与解决
你的LINQ查询无法运行主要有两个核心问题:
- 分组后上下文错误:
Select里的x.ageRange是无效的,因为GroupBy之后,当前迭代对象是分组g,而非原集合的元素x。分组的键(即你用来分组的AgeRangeCode)需要通过g.Key获取。 - 字段名可能不匹配:C#属性通常采用PascalCase命名规范(比如
Population而非population),要确保代码里的字段名和实体类的属性名完全一致。
另外,关于你提到的"获取分组下其他未汇总列数据",需要分两种情况处理:
- 如果分组内的其他列(比如
AgeRangeName)在同一分组中值完全相同,直接取分组内任意元素的对应属性即可; - 如果分组内其他列存在不同值,需要明确需求(比如取第一个、最后一个,或拼接所有值)。
修正后的代码示例
基础版:仅获取分组键与汇总人口
m.Items .GroupBy(x => x.AgeRangeCode) .Select(g => new { Population = g.Sum(x => x.Population), AgeRangeCode = g.Key });
包含其他统一列的版本(假设同一分组内AgeRangeName值一致)
m.Items .GroupBy(x => x.AgeRangeCode) .Select(g => new { Population = g.Sum(x => x.Population), AgeRangeCode = g.Key, AgeRangeName = g.First().AgeRangeName // 取分组内第一个元素的AgeRangeName });
处理分组内多值列的版本(比如拼接所有不同的Region值)
m.Items .GroupBy(x => x.AgeRangeCode) .Select(g => new { Population = g.Sum(x => x.Population), AgeRangeCode = g.Key, Regions = string.Join(", ", g.Select(x => x.Region).Distinct()) });
内容的提问来源于stack exchange,提问作者Tarun Gautam
相关产品推荐
相关产品推荐

