C#中如何将LINQ分组统计结果转为指定对象列表
解决方法:替换匿名类型为自定义实体类
这问题太常见啦!你当前的LINQ查询返回匿名类型,是因为用了new {}语法。要得到目标对象列表,只需要两步走:
1. 定义对应的数据实体类
首先创建一个和你需要的结果结构匹配的类,比如命名为ProfessionCount(你也可以根据业务场景改名字):
public class ProfessionCount { public string Profession { get; set; } public int Count { get; set; } }
这个类的属性要和你分组后的g.Key(对应description)、g.Count()的类型匹配——这里假设e.description是字符串,计数是整数,你可以根据实际类型调整。
2. 修改LINQ查询,实例化自定义类
把原来的匿名对象替换成你刚定义的ProfessionCount实例就行:
// 现在返回的是IEnumerable<ProfessionCount>类型 var dataPoints = from e in evaluations.Take(20) group e.EvaluationID by e.description into g select new ProfessionCount { Profession = g.Key, Count = g.Count() };
如果直接需要List<ProfessionCount>,只需要在查询末尾加上.ToList():
List<ProfessionCount> dataPointsList = dataPoints.ToList();
额外:方法语法写法(可选)
如果你偏好LINQ的方法链式写法,效果是一样的:
var dataPointsList = evaluations.Take(20) .GroupBy(e => e.description) .Select(g => new ProfessionCount { Profession = g.Key, Count = g.Count() }) .ToList();
这样处理后,你得到的就是强类型的对象列表,后续不管是绑定UI、序列化还是做其他业务操作都更方便啦!
内容的提问来源于stack exchange,提问作者tcode
相关产品推荐
相关产品推荐

