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