选择具有多个子项的不同父项

时间:2012-11-30 14:53:56

标签: linq

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 }
    }

我确定我需要在这里使用某种群体,但我不确定如何。

2 个答案:

答案 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()