Linq:GroupBy 其 child.value 属性值

Jor*_*rdi 3 .net c# linq group-by

我有一个Parent包含Child对象集合的类,其中Child有两个属性:KeyValue

class Parent
{
    public IEnumerable<Child> Children { get; set; }
}

class Child
{
    public String Key { get; set; }
    public String Value { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我需要List<Parent>按其分组 a Child.Value

例子:

IEnumerable<Parent> parents = new List<Parent>()
{ 
    new Parent()
    {
        Children = new List<Child>()
        {
            new Child() { Key = "key1", Value = "v1" },
            new Child() { Key = "key1", Value = "v2" }
        }
    },
    new Parent()
    {
        Children = new List<Child>()
        {
            new Child() { Key = "key1", Value = "v2" },
            new Child() { Key = "key1", Value = "v3" }
        }
    }
};
Run Code Online (Sandbox Code Playgroud)

有什么办法吗?

Eni*_*ity 5

这对你有用吗?

var query =
    from p in parents
    from c in p.Children
    group p by c.Value;
Run Code Online (Sandbox Code Playgroud)

这给出:

询问


你也可以使用这个:

var query =
    parents
        .SelectMany(p => p.Children, (p, c) => new { p, c })
        .GroupBy(x => x.c.Value, x => x.p);
Run Code Online (Sandbox Code Playgroud)

这是一个即使Childrennull或空枚举也能工作的查询:

var query =
    parents
        .SelectMany(p =>
            (p.Children ?? new Child[] { })
                .DefaultIfEmpty(new Child() { Value = null }),
            (p, c) => new { p, c })
        .GroupBy(x => x.c.Value, x => x.p);
Run Code Online (Sandbox Code Playgroud)