从某些父母那里退回那些他们的孩子的某些财产等于某个价值的记录?

Posted

技术标签:

【中文标题】从某些父母那里退回那些他们的孩子的某些财产等于某个价值的记录?【英文标题】:Return those records off some parents from which their children's certain property equals a certain value? 【发布时间】:2017-10-08 14:04:01 【问题描述】:

如何编写这个查询? :

var parents = parents.Select(o => o.children.Where(p=>p.property1 == "Something")).ToList();

这会出现转换类型错误。我如何根据孩子的属性为真条件返回一些父母?

【问题讨论】:

Select 用于选择项目。你想要parents.Where。然后你想要一个 any 子匹配的父级。因此它变成parents.Where(... children.Any(...)) 为什么不写完整的代码,比如var/or a type = parents.Select... 并更正缺少的) 你想把它放在哪里? @Anil 谢谢。我编辑了代码。 @EfronA。感谢您的更正,但您不应该在有问题的代码中收到 conversion type 异常,将 where 表达式列表 o => o.children.Where(p=>p.property1 == "Something") 选择为 var 类型。如果您真的想选择父母,那么您应该在应用过滤后选择父母,例如Where(x->x..).Select(p->p),@Rob 已经澄清了这一点。 【参考方案1】:

您的查询可能是这样的:

parents = parents.Where(p => p.children.Any(c => c.property1 == "Something")).ToList();

Enumerable.Where 过滤基于谓词的值序列,而Enumerable.Select 将序列的每个元素投影到一个新形式中。

Enumerable.Any 如果至少有 1 个 porterty1 等于“某物”的孩子,则返回 true

由于您只需在此处进行过滤,您只需使用Where。如果您想创建与父级本身不同的某种类型的集合,您可以使用 Select

【讨论】:

这就是我会得到的。我有一个一对零/多的关系,并且属性值对于孩子来说也可能是空的。 p.children 也可能有空值,因为正如我所说,关系是一对零/多。这是正确的吗? @sachin 那么你也必须添加一个空检查。 parents = parents.Where(p => p.children != null && p.children.Any(c => c.property1 == "Something")).ToList();【参考方案2】:

试用代码

var parents=    (from p in parents.AsEnumerable()
    where p.children!=null && p.children.property1 =="Something"
    select p).ToList()

【讨论】:

以上是关于从某些父母那里退回那些他们的孩子的某些财产等于某个价值的记录?的主要内容,如果未能解决你的问题,请参考以下文章

针对相同的孩子,但只针对某些不同的父母——CSS和jQuery选择器样式

为啥我不能在某些特定情况下将父母投射到孩子身上

jquery选择器需要选择父母的所有某些孩子

React,如何从父母那里访问孩子的状态?无需更新父母的状态

Apache 不会在新的 Xampp 安装上启动:管道已结束。孩子:无法从父母那里读取套接字数据

从父母发送消息给孩子