我有两个相互嵌套的实体,它们本身具有一对多关系。
对我来说,它需要两个查询来获取已启用的模块 (Module.IsEnabled == 1) 及其由也已启用 (ModuleScreen.IsEnabled == 1) ModuleScreen 对象填充的 ModuleScreen 属性。
有没有办法通过一个查询来查询这个?
我已经见过this问题相同且接受的答案表明它需要两个查询。
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 有助于进一步将表示与服务层和域模型分离。
关于c# - 可以使用 EF 通过单个查询来查询我的案例吗? (实体的条件和嵌套实体的条件),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32415425/