c# - Fluent LINQ - 选择包含子列表的父列表,其中子子集存在

标签 c# sql linq fluent

那个标题是最糟糕的...

无论如何,我要做的是选择一个包含 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/

相关文章:

sql - 替换 select 语句中的多个实例

mysql - 日常 MySQL(部分和过滤)复制的最佳实践?

c# - 通过递归动态地使用 XElement 构建 Xml

c# - 一个 ViewModel 的两个并发 View

c# - 如何在C#接口(interface)中实现泛型?

python - ndb.gql 与 ndb.query - Google App Engine

c# - 有没有办法加快这段在两个 XML 文件中查找数据更改的代码?

c# - 正则表达式不适用于 Linq to Sql

c# - `using` 完成后断开与事件的连接

c# - 如何使用 Azure IoT 中心 SDK 从 Azure IoT 中心设备接收消息到 C# 控制台应用程序