在.Where()中包含导航属性?

时间:2014-07-28 21:18:27

标签: c# linq entity-framework linq-to-entities

我有几张有亲子关系的桌子。 E.g。

CREATE TABLE parent
(
    parentid VARCHAR(32),
    name VARCHAR(128),
    CONSTRAINT PK_parent PRIMARY KEY (parentid)
);

CREATE TABLE child
(
    parentid VARCHAR(32),
    childid VARCHAR(32),
    name VARCHAR(128),
    age INTEGER,
    CONSTRAINT PK_child PRIMARY KEY (parentid, childid),
    CONSTRAINT FK_child_parent FOREIGN KEY (parentid)
    REFERENCES parent (parentid)
);

我需要查找父记录,其中孩子的某些条件为真。在SQL中,这很简单:

SELECT p.*
FROM parent AS p
JOIN child AS c
ON c.parentid = p.parentid
WHERE c.age = 10
;

但我如何在Entity Framework中执行此操作?

我定义了一个导航属性,因此父类有一个子集合,所以我希望能够包含一个.Where(p => p.child.age == 10) ,但那不起作用。

是什么?

2 个答案:

答案 0 :(得分:3)

如果您的导航属性是一个集合,则必须使用Any

.Where(p => p.Children.Any(c => c.Age == 10))

答案 1 :(得分:0)

由于定义了外键,EF将自动为其添加属性:

from p in Parent
where p.Children.Any(c=> c.Age == 10)
select p;

from c in child
where c.Age == 10
select c.Parent;