0

我是 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();

但是没有用。

有人可以帮助我吗?

谢谢您的帮助!

4

2 回答 2

1

你好,你看到这个帖子了吗?实体框架:查询子实体。你的代码有一些不同,也许这对你有帮助。

更新:投影是当查询的结果输出到与查询的类型不同的类型时,它可以是匿名类型,但也可以是具体类型。因此,使用数据传输对象对于在进程之间传递数据很有用,您可以在此处阅读完整的说明数据传输对象

 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();

我希望这可以解决你的问题

于 2013-10-25T09:12:59.643 回答
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();

我希望它有所帮助。

于 2013-10-25T09:32:25.790 回答