【发布时间】:2023-03-27 09:05:01
【问题描述】:
我有下一个情况:
public class ParentClass
{
public string Name { get; set; }
public List<ChildClass> ChildrenList {get;set;}
}
public class ChildClass
{
public string Name { get; set; }
public GrandChildClass GrandChild { get; set; }
}
public class GrandChildClass
{
public string Name { get; set; }
}
GrandChildClass grandChild1 = new GrandChildClass() { Name = "AAA1" };
GrandChildClass grandChild2 = new GrandChildClass() { Name = "BBB1" };
GrandChildClass grandChild3 = new GrandChildClass() { Name = "CCC1" };
GrandChildClass grandChild4 = new GrandChildClass() { Name = "DDD1" };
ChildClass child1 = new ChildClass() { Name = "AAA", GrandChild = grandChild1 };
ChildClass child2 = new ChildClass() { Name = "BBB", GrandChild = grandChild2 };
ChildClass child3 = new ChildClass() { Name = "CCC", GrandChild = grandChild3 };
ChildClass child4 = new ChildClass() { Name = "DDD", GrandChild = grandChild4 };
ChildClass child5 = new ChildClass() { Name = "EEE", GrandChild = grandChild2 };
List<ParentClass> parentsList = new List<ParentClass>()
{
new ParentClass { Name = "Parent1", ChildrenList = new List<ChildClass>() { child1, child2 } },
new ParentClass { Name = "Parent2", ChildrenList = new List<ChildClass>() { child3, child4 } },
new ParentClass { Name = "Parent3", ChildrenList = new List<ChildClass>() { child1, child5 } }
}
我想用最简单的方法找出哪些父母有共同的孩子。
我不想做一些 foreach 循环并进行比较,但我想使用 linq 函数,例如 Intersect 或类似的函数。
例如,这里有一个类似的东西,它正在工作:
List<List<string>> lists = new List<List<string>>()
{
new List<string> {"Hello", "World", "7"},
new List<string> {"Hello", "7", "Person"},
new List<string> {"7", "7", "Hello"}
};
List<string> extList = lists.Cast<IEnumerable<string>>()
.Aggregate((a, b) => a.Intersect(b)).ToList();
就我而言,我希望结果是: Parent1 和 Parent3 有共同的 child1。
有什么想法吗?
编辑:
另外,如何找到所有有共同孙子的父母?
【问题讨论】:
-
澄清一下:如果孩子共享
Name而不是同一个对象实例,则认为它是平等的? -
同一个对象实例。
标签: c# list intersection