Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.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# 是否可以使用EF通过单个查询查询我的案例?(其中实体的条件和嵌套实体的条件)_C#_Entity Framework - Fatal编程技术网

C# 是否可以使用EF通过单个查询查询我的案例?(其中实体的条件和嵌套实体的条件)

C# 是否可以使用EF通过单个查询查询我的案例?(其中实体的条件和嵌套实体的条件),c#,entity-framework,C#,Entity Framework,我有两个相互嵌套的实体,它们本身有一对多的关系 对我来说,它需要两个查询来获取启用的模块(Module.IsEnabled==1)及其由同样启用的(ModuleScreen.IsEnabled==1)ModuleScreen对象填充的ModuleScreen属性 有没有一种方法可以通过一个查询来查询 我已经遇到了一个问题,其中问题是相同的,并且被接受的答案表明它需要两个查询 公共类模块 { 公共虚拟整数Id { 得到; 设置 } 已启用公共虚拟int { 得到; 设置 } 公共虚拟IEnumer

我有两个相互嵌套的实体,它们本身有一对多的关系

对我来说,它需要两个查询来获取启用的模块(Module.IsEnabled==1)及其由同样启用的(ModuleScreen.IsEnabled==1)ModuleScreen对象填充的ModuleScreen属性

有没有一种方法可以通过一个查询来查询

我已经遇到了一个问题,其中问题是相同的,并且被接受的答案表明它需要两个查询

公共类模块
{
公共虚拟整数Id
{
得到;
设置
}
已启用公共虚拟int
{
得到;
设置
}
公共虚拟IEnumerable模块屏幕
{
得到;
设置
}
公共类模块屏幕
{
公共虚拟整数Id
{
得到;
设置
}
已启用公共虚拟int
{
得到;
设置
}
公共虚拟模块
{
得到;
设置
}
}

您可以将所需内容投影到匿名类型上:

var query=context.Modules
                 .Where(m=>m.IsEnabled == 1)
                 .Select(m=> new {  ModuleId= m.Id, 
                                    ModuleScreen=m.ModuleScreen.Where(m=>m.IsEnabled == 1)
                                 }
                        );
如果不想使用匿名类型,还可以创建另一个类来保存要投影的信息:

public class ModuleDTO
{
   public int Id{get; set;}

   public IEnumerable<ModuleScreen> ModuleScreens{get; set;}
}
只不过是一个容器类,它公开属性以保存要投影的信息。DTO有助于进一步将表示与服务层和域模型分离

var query=context.Modules
                 .Where(m=>m.IsEnabled == 1)
                 .Select(m=> new ModuleDTO{ Id= m.Id, 
                                            ModuleScreens=m.ModuleScreen.Where(m=>m.IsEnabled == 1)
                                          }
                        );