我正在尝试使用以下代码对一些字段进行分组:
var cars = tmp.Select(a => new { a.Make, a.Model, a.Year });
cars = cars.Distinct()
.OrderBy(a => a.Make)
.ThenBy(a => a.Model);
var groupedCars = cars.GroupBy(a => new { a.Make, a.Model })
.Select(b => new { b.Make, b.Model, b.Year });
不幸的是,最后一行代码给了我错误,因为它无法识别这三个字段。
'System.Linq.IGrouping(AnonymousType#1,AnonymousType#2)'不包含'Make'的定义,也没有扩展方法'Make'接受类型为'System.Linq.IGrouping(AnonymousType#1,AnonymousType)的第一个参数#2)'(您是否缺少using指令或程序集引用?)
对于所有三个字段(制造,型号,年份),这都是相同的错误。
任何想法如何解决这一问题?
最佳答案
将汽车按品牌和型号分组后,序列中的每个元素都是一个组。您可以使用Key
属性获取该组的密钥,因此可以找到该组的Make
和Model
,但是Year
毫无意义...每个组中会有多辆车,并且它们可能都有不同的年份。您当然可以在组中使用该信息。例如:
var groupedCars = cars.GroupBy(a => new { a.Make, a.Model })
.Select(g => new { g.Key.Make, g.Key.Model,
MinYear = g.Min(car => car.Year),
MaxYear = g.Max(car => car.Year) });
但从根本上讲,您需要考虑以下事实:序列中的每个元素都是一个组,而不是单个汽车。
关于c# - GroupBy和Select扩展方法帮助,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22695334/