【发布时间】:2015-06-04 20:37:33
【问题描述】:
假设我有以下数据:
Parent
> Child 1 (Alive = true)
> Child 2 (Alive = true)
> Grandchild 1 (Alive = false)
> Grandchild 2 (Alive = true)
> Child 3 (Alive = false)
> Grandchild 3 (Alive = false)
我想编写一个查询来选择所有 Alive 为真的记录,从而排除任何 Alive 为假的记录。这是我想弄清楚的语法:
from p
in this.People
where p.IsAlive && (p.Children.IsAlive) && (p.Children.Children.IsAlive)
select p
我希望结果集如下所示:
Parent
> Child 1 (Alive = true)
> Child 2 (Alive = true)
> Grandchild 2 (Alive = true)
【问题讨论】:
-
如果
Child 4 (Alive = false)和Grandchild 4 (alive = true)会发生什么?Grandchild对象实际上是Child对象的子对象吗? -
是的,他们实际上是孩子。想象一个 People 表,其 ParentId 列是同一个表的 FK。所以在你的例子中,孙子 4 将被排除在外,因为孩子 4 不活着。
-
他们有
Parent的导航属性,还是只有Id? -
他们确实有一个 Parent 属性
-
你试过
where p.IsAlive && (p.Parent != null && p.Parent.IsAlive || p.Parent == null),然后groupby p.Parent?
标签: c# linq entity-framework linq-to-sql