假设我有以下两个表
A,B和C表有一个布尔值" IsEnabled"列。
表之间有1对多的关系如下:
我正在使用Entity框架来查询表,而编程是在C#中。 假设,我需要A中的所有列,我执行以下操作:
var query = _context.A;
query.where( <where clause> )
如果我需要包含B列以防止延迟加载,
query.Include ( s => s.B );
问题是,如何通过添加where子句来包含B的列,以仅选择具有IsEnabled = 1的行? 我正在寻找类似的东西:
query.Include ( s => s.B.where ( k => k.IsEnabled = 1 ))
(这不起作用并抛出运行时异常)
如果我们可以得到上述问题,我想包括C的列,对于B和C都是IsEnabled = 1的行。这可能吗?
答案 0 :(得分:1)
Include用于热切地加载关系,但不幸的是,Entity Framework不支持在服务器端过滤这些集合,无论是懒惰还是急切加载。
您有两个选择 - 进行客户端过滤,或重新排列查询以最有效地使用(例如,如果您在C之后,请选择C.Where(c => c.IsEnabled && c.B.IsEnabled && c.B.A.IsEnabled)
)。
答案 1 :(得分:0)
假设您有一个与此类似的实体
public class A
{
public int Id {get;set;}
public ICollection<B> Bs {get;set;}
}
public class B
{
public bool IsEnabled {get;set;}
}
因此,当您执行查询时,ICollection
到Bs
,它应该没有运行时错误。