那个标题是最糟糕的...
无论如何,我要做的是选择一个包含 n 个子对象的父对象。我将传递子对象必须匹配的条件列表 (1..n)。为了简洁起见,这是我正在使用的类(class):
public class Parent {
public int Id { get; set; }
public List<Child> Children { get; set; }
}
public class Child {
public int Id { get; set; }
public int ParentId { get; set; }
public int SomeValue { get; set; }
}
我正在寻找的是包含与我传递的所有 SomeValues 匹配的 child 的 parent 列表
如果我有:
Parent 1
Child 1, SomeValue 10
Child 2, SomeValue 20
Child 3, SomeValue 40
Parent 2
Child 4, SomeValue 10
Child 5, SomeValue 20
Child 5, SomeValue 50
myList为[10, 50],只需要返回Parent 2即可。如果 myList 是 [10, 20] 那么应该返回 parent 双方。最后,如果 myList 是 [10, 20, 60],则不应返回任何内容。
我认为以下内容不会起作用,因为子项具有的不在列表中的值会将其从结果中删除(对吗?)
parents.where(p => p.children.all(c => myList.contains(c.SomeValue)));
而 any 将不起作用,因为只要其子项之一匹配,它就会返回任何内容。我需要确保父级有一个与 myList 中的每个项目匹配的子级。我还考虑过添加一个计数以确保匹配项至少与 myList.length 一样大,但这可能行不通,因为 SomeValue 在子集合中不必是不同的(我想我可以运行一个 child 的 SomeValues 上的不同子选择?)
最佳答案
您可以翻转您的条件,并检查以确保所有列表值都包含在 Children
集合中:
var matches = parents.Where(p => myList.All(v => p.Children.Select(c => c.SomeValue).Contains(v)));
关于c# - Fluent LINQ - 选择包含子列表的父列表,其中子子集存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25857304/