在. 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),但这行不通。

什么?

在. where()中包含导航属性

如果你的导航属性是一个集合,你必须使用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;