Ses*_*ame 2 c# linq extension-methods
我正在使用以下代码尝试GroupBy几个字段:
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 });
Run Code Online (Sandbox Code Playgroud)
不幸的是,最后一行代码给了我错误,因为无法识别这三个字段.
'System.Linq.IGrouping(AnonymousType#1,AnonymousType#2)'不包含'Make'的定义,也没有扩展方法'Make'接受类型'System.Linq.IGrouping的第一个参数(AnonymousType#1,AnonymousType)可以找到#2)'你是否错过了使用指令或汇编引用?)
所有三个字段(Make,Model,Year)都是相同的错误.
任何想法如何解决这一问题?
按照品牌和型号对汽车进行分组后,序列中的每个元素都是一个组.你可以得到与该组的关键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) });
Run Code Online (Sandbox Code Playgroud)
但从根本上说,你需要考虑这样一个事实,即序列中的每个元素都是一个群体,而不是一辆汽车.