如何修改LINQ查询,实现按所有不同城市动态统计职业分组数据
动态统计各职业下不同城市人数的LINQ解决方案
嘿,这个需求很好解决!要摆脱硬编码城市名称的限制,咱们可以先获取所有人员里的唯一城市列表,再基于这个统一的列表去统计每个职业组对应的各城市人数,具体实现如下:
第一步:提取所有唯一城市
先从所有Person对象中提取出不重复的城市,还可以顺便排序,保证后续统计的城市顺序一致:
// 获取所有唯一城市并排序 var allUniqueCities = people.Select(p => p.City) .Distinct() .OrderBy(city => city) .ToList();
第二步:修改分组统计查询
基于上面拿到的城市列表,修改原有的分组查询,动态遍历每个城市统计人数:
var professionCityStats = people .GroupBy(p => p.Profession) .Select(professionGroup => new { ProfessionName = professionGroup.Key, CityCounts = allUniqueCities .Select(city => professionGroup.Count(person => person.City == city)) .ToList() });
为什么这么做?
- 不用再硬编码任何城市名称,不管数据源里新增或减少城市,代码都能自动适配
OrderBy(city => city)保证了所有职业组的城市统计顺序完全一致,后续展示数据时不会出现顺序混乱的问题- 如果某个职业组里没有某个城市的人员,
Count()会返回0,保证了数据结构的完整性
举个例子,假设数据源里有Adelaide、Brisbane、Sydney三个城市,每个职业组的CityCounts列表都会按这个顺序返回对应城市的人数,完美替代原来的硬编码写法~
内容的提问来源于stack exchange,提问作者Robbie Mills
相关产品推荐
相关产品推荐

