我有以下课程:
public class Vehicle
{
public string Make { get; set; }
public DateTime DateManufactured { get; set; }
}
然后我列出了一系列车辆:
var dateTime1 = DateTime.Now.AddDays(-7);
var dateTime2 = DateTime.Now.AddDays(-8);
var dateTime3 = DateTime.Now.AddDays(-9);
var vehicles = new List<Vehicle>
{
new Vehicle {Make = "Ferrari", DateManufactured = dateTime1},
new Vehicle {Make = "Mazda", DateManufactured = dateTime2},
new Vehicle {Make = "Dodge", DateManufactured = dateTime3},
new Vehicle {Make = "Holden", DateManufactured = dateTime1},
new Vehicle {Make = "Chrysler", DateManufactured = dateTime2},
new Vehicle {Make = "Mazda", DateManufactured = dateTime3},
};
接下来,我试图获得DatesManufactured列表以及每个日期在该日制造的车辆。
所以我去了:
var vehiclesGroupedByDate = vechicles.GroupBy(x => x.DateManufactured)
.Select(x => new
{
x.First().DateManufactured,
Vehicles = x.ToList()
});
这会产生罚款,但我不确定x.First()
部分。它有效,但感觉不太对劲。有人知道一种更优雅的方式来编码吗?
答案 0 :(得分:7)
当您使用GroupBy
时,它会创建IGrouping<TKey, TItem>
,因此您只需执行以下操作:
var vehiclesGroupedByDate = vechicles.GroupBy(x => x.DateManufactured)
.Select(x => new
{
x.Key,
Vehicles = x.ToList()
});
答案 1 :(得分:4)
我认为您的代码没有任何问题,但您也可以使用x.Key
代替x.First().DateManufactured
,而不需要创建另一个IEnumerable。
答案 2 :(得分:3)
GroupBy公开Key属性:
var vehiclesGroupedByDate = vechicles.GroupBy(x => x.DateManufactured)
.Select(x => new
{
x.Key,
Vehicles = x.ToList()
});