在Queryable对象的Include语句中添加where子句

Per*_*ver 5 c# entity-framework iqueryable

假设我有以下两个表

  • 一个
  • C

A,B和C表有一个布尔"IsEnabled"列.

表之间有1对多的关系如下:

  • A-> B
  • B->Ç

我正在使用Entity框架来查询表,而编程是在C#中.假设,我需要A中的所有列,我执行以下操作:

var query = _context.A; query.where( <where clause> )

如果我需要包含B列以防止延迟加载,

query.Include ( s => s.B );
Run Code Online (Sandbox Code Playgroud)

问题是,如何通过添加where子句来包含B列以仅选择具有IsEnabled = 1的行?我正在寻找类似的东西:

query.Include ( s => s.B.where ( k => k.IsEnabled = 1 )) (这不起作用并抛出运行时异常)

如果我们可以得到上面的问题,我想要包括C的列,对于B和C都是IsEnabled = 1的行.这可能吗?

Ric*_*ard 1

Include 用于急切加载关系,但不幸的是,实体框架不支持通过延迟加载或急切加载在服务器端过滤这些集合。

您有两个选择 - 在客户端进行过滤,或重新排列您的查询以实现最有效的使用(例如,如果您在使用 C,请选择C.Where(c => c.IsEnabled && c.B.IsEnabled && c.B.A.IsEnabled))。