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

Linq 选择具有多个子项的不同父项,linq,Linq,我想用LINQ将此列表选择到列表中。我试过了,但没用: Car -> Red Car -> Blue Boat -> Brown Boat -> Yellow Boat -> Green Plane -> White var List=结果。选择(v=>新车 { 类型=v.类型; 颜色=新列表{new Color=v.Color} } 我确定我需要在这里使用某种群组,但我不确定如何使用。听起来应该通过GroupBy呼叫: var

我想用LINQ将此列表选择到
列表中。我试过了,但没用:

Car   ->  Red
Car   ->  Blue
Boat  ->  Brown
Boat  ->  Yellow
Boat  ->  Green
Plane ->  White
var List=结果。选择(v=>新车
{
类型=v.类型;
颜色=新列表{new Color=v.Color}
}

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

听起来应该通过
GroupBy
呼叫:

var List<Vehicle> = results.Select(v => new Vehicle
    {
    Type = v.Type;
    Colors = new List<Color> { new Color = v.Color }
    }
results.GroupBy(r => r.Type)
       .Select(g => new Vehicle { 
                                   Type = g.Key, 
                                   Colors = t.Select(p => p.Color).ToList()
                                })
       .ToList()
请注意,
GroupBy
的另一个重载将允许您跳过
Select
调用,但我认为这样做更简单。如果您想要其他表单,请告诉我

请注意,如果在
车辆
对象中确实不需要这些,可以使用
查找

var query = input.GroupBy(x => x.Type, x => x.Color)
                 .Select(g => new Vehicle { Type = g.Key, Colors = g.ToList() })
                 .ToList();

如果您只需要查询的特定方法中的结果,那么这很方便,但是如果您将数据传播到其他地方,则创建一个
列表将更有意义。

这是按颜色分组的,组中的每个元素都是完整的结果。我想您想要更像我的答案的东西。对,这会起作用-虽然我认为如果你把每一个分组都变成一组颜色会更简单。我还强烈建议使用换行符和空格来增加可读性:)我编辑了这篇文章,我同意按两个字段分组的字母更少,但不会改变,因为这是我最初的答案
var query = input.GroupBy(x => x.Type, x => x.Color)
                 .Select(g => new Vehicle { Type = g.Key, Colors = g.ToList() })
                 .ToList();
var lookup = input.ToLookup(x => x.Type, x => x.Color);

foreach (var color in lookup["Car"])
{
    // ...
}