具有分组和条件结果的linq查询
我以前问过一个类似的问题,还有一个补充问题。我有一个汽车类型列表,结构如下:具有分组和条件结果的linq查询,linq,Linq,我以前问过一个类似的问题,还有一个补充问题。我有一个汽车类型列表,结构如下: class Car { public string Make { get; set; } public string Model { get; set; } public string SecondHand { get; set; } public int AccidentCount { get; set; } public int
class Car
{
public string Make { get; set; }
public string Model { get; set; }
public string SecondHand { get; set; }
public int AccidentCount { get; set; }
public int MaintenanceCount { get; set; }
}
List<Car> cars = new List<Car>()
{
new Car(){Make = "Mercedes", Model = "E-200", SecondHand ="N", AccidentCount = 1 ,MaintenanceCount = 0},
new Car(){Make = "Mercedes", Model = "E-200", SecondHand ="N", AccidentCount = 1 ,MaintenanceCount = 1},
new Car(){Make = "Mercedes", Model = "E-200", SecondHand ="Y", AccidentCount = 1 ,MaintenanceCount = 1},
new Car(){Make = "Mercedes", Model = "E-180", SecondHand ="N", AccidentCount = 0 ,MaintenanceCount = 1},
new Car(){Make = "Mercedes", Model = "E-180", SecondHand ="N", AccidentCount = 1 ,MaintenanceCount = 1}
};
等级车
{
公共字符串Make{get;set;}
公共字符串模型{get;set;}
公共字符串二手{get;set;}
公共int意外计数{get;set;}
public int MaintenanceCount{get;set;}
}
列出车辆=新列表()
{
新车(),
新车(),
新车(){Make=“Mercedes”,Model=“E-200”,SecondHand=“Y”,acidentcount=1,MaintenanceCount=1},
新车(),
新车()
};
在查询的输出中,我需要对Make和Model进行两列分组,得到两列中的acidentcount和MaintenanceCount之和,最后确定给定模型输出“Y”是否有任何“二手”值“Y”,否则为“N”
以上各项的输出应为:
Make Model AccidentCount MaintenanceCount SecondHand
Mercedes E-200 3 2 Y
Mercedes E-180 1 2 N
使模型意外计数维护计数为二手
梅赛德斯E-200 3 2 Y
梅赛德斯E-180 1 2 N
我在查询的输出中需要的是Make和Model的两列,通过对它们进行分组
获取两列中的意外计数和维护计数之和
最后,如果给定模型输出“Y”有任何“二手”值“Y”,则为“N”
最终查询如下所示:
cars.GroupBy(c=> new {c.Make,c.Model})
.Select(g=> new Car {
Make = g.Key.Make,
Model = g.Key.Model,
AccidentCount = g.Sum(c=>c.AccidentCount),
MaintenanceCount = g.Sum(c=>c.MaintenanceCount),
SecondHand = g.Any(c=> c.SecondHand=="Y") ? "Y" : "N"
});
谢谢,这就是我想要的结果。
AccidentCount = g.Sum(c=>c.AccidentCount),
MaintenanceCount = g.Sum(c=>c.MaintenanceCount)
SecondHand = g.Any(c=> c.SecondHand=="Y") ? "Y" : "N"
cars.GroupBy(c=> new {c.Make,c.Model})
.Select(g=> new Car {
Make = g.Key.Make,
Model = g.Key.Model,
AccidentCount = g.Sum(c=>c.AccidentCount),
MaintenanceCount = g.Sum(c=>c.MaintenanceCount),
SecondHand = g.Any(c=> c.SecondHand=="Y") ? "Y" : "N"
});