C# 在可查询对象的Include语句中添加where子句
假设我有下面两张表C# 在可查询对象的Include语句中添加where子句,c#,entity-framework,iqueryable,C#,Entity Framework,Iqueryable,假设我有下面两张表 A B C A、 B和C表有一个布尔“IsEnabled”列 各表之间存在1对多关系,如下所示: A->B B->C 我正在使用实体框架来查询表,程序是用C#编写的。 假设我需要A中的所有列,我执行以下操作: var query=\u context.A; query.where() 如果我需要包含B列以防止延迟加载 query.Include ( s => s.B ); 问题是,如何通过添加where子句来仅选择IsEnabled=1的行来包括B的列? 我正
- A
- B
- C
- A->B
- B->C
var query=\u context.A;
query.where()
如果我需要包含B列以防止延迟加载
query.Include ( s => s.B );
问题是,如何通过添加where子句来仅选择IsEnabled=1的行来包括B的列?
我正在寻找类似于:
query.Include(s=>s.B.where(k=>k.IsEnabled=1))
(这不起作用并引发运行时异常)
如果我们可以得到上面的问题,我想包括C的列以及B和C的IsEnabled=1的行。这可能吗?include用于急切地加载关系,但遗憾的是实体框架不支持在服务器端过滤这些集合,无论是延迟加载还是急切加载
您有两种选择—进行客户端筛选,或者重新安排查询以最有效地使用(例如,如果您在C之后,请选择
C.Where(C=>C.IsEnabled&&C.B.IsEnabled&&C.B.A.IsEnabled)
)。假设您有一个类似的实体
public class A
{
public int Id {get;set;}
public ICollection<B> Bs {get;set;}
}
public class B
{
public bool IsEnabled {get;set;}
}
公共A类
{
公共int Id{get;set;}
公共ICollection Bs{get;set;}
}
公共B级
{
公共布尔值已启用{get;set;}
}
因此,当您执行查询时,因为您有到Bs
的ICollection
,它应该可以正常工作,不会出现运行时错误