可以使用EF查询我的案例.(其中一个条件用于实体,另一个用于嵌套实体)
本文关键字:用于 实体 一个 嵌套 条件 另一个 查询 EF 我的 案例 可以使 | 更新日期: 2023-09-27 18:11:16
我有两个相互嵌套的实体,它们本身有一对多关系。
对我来说,它需要两个查询,以获得启用的模块(模块。IsEnabled == 1)和它们的ModuleScreen属性由也已启用的(ModuleScreen)填充。IsEnabled == 1) modulesscreen对象
是否有办法通过一个查询来查询这个?
我已经遇到了这个问题,问题是相同的,公认的答案表明它需要两个查询。
public class Module
{
public virtual int Id
{
get;
set;
}
public virtual int IsEnabled
{
get;
set;
}
public virtual IEnumerable<ModuleScreen> ModuleScreen
{
get;
set;
}
public class ModuleScreen
{
public virtual int Id
{
get;
set;
}
public virtual int IsEnabled
{
get;
set;
}
public virtual Module Module
{
get;
set;
}
}
您可以实现将需要的内容投射到匿名类型上:
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;}
}
然后你可以这样做:
var query=context.Modules
.Where(m=>m.IsEnabled == 1)
.Select(m=> new ModuleDTO{ Id= m.Id,
ModuleScreens=m.ModuleScreen.Where(m=>m.IsEnabled == 1)
}
);
DTO只不过是一个容器类,它公开属性来保存您想要投影的信息。dto有助于进一步将表示与服务层和领域模型解耦。