反转LINQ中的嵌套集合

帕斯卡·伯杰(Pascal Berger)

有一个类型为A的列表,每个都包含一个B型列表,什么是获取所有类型B的列表的最佳方法,每个列表都包含它们所属的类型A的列表?

具有如下列表:

var parents = new List<Parent> {
    {
        new Parent {
            ID = 1,
            Childs = new List<Child> {
                {
                    new Child {
                        ID = 1
                    }
                },
                {
                    new Child {
                        ID = 2
                    }
                },
                {
                    new Child {
                        ID = 3
                    }
                }
            }
        }                    
    },
    {
        new Parent {
            ID = 2,
            Childs = new List<Child> {
                {
                    new Child {
                        ID = 3
                    }
                },
                {
                    new Child {
                        ID = 4
                    }
                },
                {
                    new Child {
                        ID = 5
                    }
                }
            }
        }                    
    }
};

我想查询此结果以得到以下结果:

[
  {
    Child = 1,
    InParent = [1]
  },
  {
    Child = 2,
    InParent = [1]
  },
  {
    Child = 3,
    InParent = [1, 2]
  },
  {
    Child = 4,
    InParent = [2]
  },
  {
    Child = 5,
    InParent = [2]
  },
]

编辑:我尝试过一种方法,首先使用SelectMany来使孩子扁平化Distinct,但是不确定如何再次将其链接到父对象:

var foo =
    from childId in parents.SelectMany(x => x.Childs).Select(x => x.ID).Distinct()
    select
        new
        {
            childId = childId,
            inParent = // Missing Part
        };
蒂姆·施密特(Tim Schmelter)

您必须先使用SelectMany它们来展平它们,然后使用GroupBy来按child-id分组并String.Join合并每个parent-id:

var childParents = parents
    .SelectMany(p => p.Childs.Select(c => new {Parent = p, Child = c}))
    .GroupBy(x => x.Child.ID)
    .Select(g => new
    {
        Child = g.Key,
        InParent = String.Join(", ", g.Select(x => x.Parent.ID))
    });

结果:

在此处输入图片说明

如果您实际上不希望该InParent属性是字符串而是一个List<int>(或数组),请使用以下命令:

.....
InParent = g.Select(x => x.Parent.ID).ToList()  // or ToArray()

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

反转LINQ中的嵌套集合

来自分类Dev

LINQ检查嵌套集合中的重复项

来自分类Dev

LINQ检查嵌套集合中的重复项

来自分类Dev

使用 LINQ 在嵌套集合中查找值

来自分类Dev

如何使用LINQ C#在字典中过滤嵌套集合

来自分类Dev

如何在Linq和EF中订购嵌套集合

来自分类Dev

如何使用linq获取集合,但从嵌套集合中删除一些实体呢?

来自分类Dev

如何反转集合中的树状链接?

来自分类Dev

LINQ筛选器列表(按嵌套集合)

来自分类Dev

使用LINQ to SQL检索嵌套集合

来自分类Dev

linq嵌套实体和集合

来自分类Dev

Hazelcast IMap中的嵌套集合

来自分类Dev

Java中的同步嵌套集合

来自分类Dev

删除嵌套集合中的实体

来自分类Dev

Linq任何集合中的任何集合

来自分类Dev

LINQ从主集合中删除集合

来自分类Dev

使用LINQ将对象和嵌套的集合信息组合到一个新的对象中

来自分类Dev

LINQ使用嵌套集合将多列分组

来自分类Dev

动态表达式 LINQ Select - SelectMany from 嵌套集合

来自分类Dev

反转Haskell中的自定义嵌套列表

来自分类Dev

Sonata Admin(2.3)中的嵌套集合字段

来自分类Dev

python嵌套字典:集合中的OrderedDict

来自分类Dev

如何在Spark中读取嵌套集合

来自分类Dev

js中的嵌套模型和集合

来自分类Dev

更新MongoDB集合文档中的嵌套键值

来自分类Dev

将项目推入AngularJS的嵌套集合中

来自分类Dev

优化 mongoDb 中的嵌套集合调用

来自分类Dev

LINQ to SQL中的嵌套列表

来自分类Dev

LINQ中的嵌套匿名类型