public class Vehicle {
public string Type
public List<Color> Colors;
}
public class Result {
public string Type
public string Color;
}
我从查询中得到Result
的列表,如下所示:
Car -> Red
Car -> Blue
Boat -> Brown
Boat -> Yellow
Boat -> Green
Plane -> White
我想用LINQ选择此列表到List<Vehicle>
。我试过这个,但它不起作用:
var List<Vehicle> = results.Select(v => new Vehicle
{
Type = v.Type;
Colors = new List<Color> { new Color = v.Color }
}
我确定我需要在这里使用某种群体,但我不确定如何。
答案 0 :(得分:3)
听起来应该通过GroupBy
电话:
var query = input.GroupBy(x => x.Type, x => x.Color)
.Select(g => new Vehicle { Type = g.Key, Colors = g.ToList() })
.ToList();
请注意,GroupBy
的另一个重载会允许您跳过Select
调用,但我认为这样做更简单。如果您想要替代表格,请告诉我。
请注意,如果您在Vehicle
个对象中确实不需要这些,则可以使用Lookup
:
var lookup = input.ToLookup(x => x.Type, x => x.Color);
foreach (var color in lookup["Car"])
{
// ...
}
如果您只需要查询特定方法中的结果,那么这很方便,但如果您将数据传播到其他位置,则创建List<Vehicle>
会更有意义。
答案 1 :(得分:0)
results.GroupBy(r => r.Type)
.Select(g => new Vehicle {
Type = g.Key,
Colors = t.Select(p => p.Color).ToList()
})
.ToList()