Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在可查询对象的Include语句中添加where子句_C#_Entity Framework_Iqueryable - Fatal编程技术网

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和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的列? 我正在寻找类似于:

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
,它应该可以正常工作,不会出现运行时错误