我正在尝试使用以下代码对一些字段进行分组:

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属性获取该组的密钥,因此可以找到该组的MakeModel,但是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/

10-09 03:10