我是C#开发人员,我在使用Entity Framework 5时遇到了问题。
我使用默认代码生成策略将我的数据库映射到Entity。特别是有三类:菜单,子菜单和子菜单。 关于三个类的关系是: 一个菜单 - >很多子菜单 一个子菜单 - >许多子菜单。
所有类都有一个名为“Active”的布尔属性。
现在,我希望过滤SubMenus处于活动状态的所有菜单,以及SubMenuItems处于活动状态的SubMenus。
为了得到这个,我试过这个:
var tmp = _model.Menus.Where(m => m.Active)
.Select =>
new
{
Menu = x,
SubMenu = x.SubMenus.Where(sb => sb.Active)
.Select(y =>
new
{
SubMenu = y,
SubMenuItem = y.SubMenuItems.Where(sbi => sbi.Active)
})
})
.Select(x => x.Menu).ToList();
但没效果。
有人可以帮助我吗?
感谢您的帮助!
答案 0 :(得分:1)
更新:投影是指将查询结果输出到与查询结果不同的类型时,它可以是匿名类型,但也可以是具体类型。因此,使用数据传输对象可以在流程之间传递数据,您可以在此处阅读完整的解释Data Transfer objects
public class MenuDto
{
public int MenuId { get; set; }
public string Name { get; set; }
public string Url { get; set; }
public List<MenuDto> SubMenus { get; set; }
}
_model.Menus.Where(m => m.Active)
.Select(p => new MenuDto
{
MenuId = p.idField,
Name = p.NameField,
Url = p.UrlField,
SubMenus = p.SubMenus.Where(sb => sb.Active)
.Select(y => new MenuDto
{
MenuId = y.idField,
Name = y.NameField,
Url = y.UrlField,
SubMenuItem = y.SubMenuItems.Where(sbi => sbi.Active)
.Select(z => new MenuDto
{
MenuId = z.idField,
Name = z.NameField,
Url = z.UrlField
})
})
}).ToList();
我希望这可以解决你的问题
答案 1 :(得分:0)
List<SubMenuItems> tmp = _model.menus.Where(a => a.active)
.SelectMany(b => b.SubMenus.Where(a => a.active)).ToList()
.SelectMany(c => c.SubMenuItems.Where(a => a.active)).ToList();
我希望它有所帮助。