我有几张有亲子关系的桌子。 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) ,但那不起作用。
是什么?
答案 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;