在. where()中包含导航属性
本文关键字:包含 导航 属性 where | 更新日期: 2023-09-27 18:15:12
我有一对父子关系的表。例如
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
;
但是我如何在实体框架中做到这一点?
我定义了一个导航属性,这样父类就有一个子类的集合,所以我希望能够包含一个. where (p=>p.child)。年龄== 10),但这行不通。
什么?
如果你的导航属性是一个集合,你必须使用Any
:
.Where(p => p.Children.Any(c => c.Age == 10))
既然定义了外键,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;