2016-12-28 27 views
0

问题: 如何仅通过实体框架查询“admin”角色的“功能”。如何使用Entity Framework查询“admin”角色的“功能”

查询结果将是一个“函数”树结构。

用途: 实体框架6

我尝试这个代码,但数据的儿子装等作用;我尝试很多方法,但没有工作。

var role = _ew.Query<Function>().Where(m => m.Roles.Any(r => r.Title == "admin")).ToList(); 

这是模型:

public class Function 
{ 
    public int Id { get; set; } 
    public string Title { get; set; } 
    public string Action { get; set; } 
    public string Controller { get; set; } 
    public string Icon { get; set; } 
    public virtual Function Parent { get; set; } 
    public virtual ICollection<Function> Functions { get; set; } 
    public int Depth { get; set; } 
    public virtual ICollection<Role> Roles { get; set; } 
} 

public class Role 
{ 
    public int Id { get; set; } 
    public string Title { get; set; } 
    public virtual ICollection<Member> Members { get; set; } 
    public virtual ICollection<Function> Functions { get; set; } 
} 
public class Member 
{ 
    public int Id { get; set; } 
    public string UserName { get; set; } 
    public string Password { get; set; } 
    public virtual Role Role { get; set; } 

} 

这是数据:

 var roles = new List<Role> 
     { 
      new Role {Title = "admin"}, 
      new Role {Title = "wubo"} 
     }; 
     context.Roles.AddOrUpdate(m => m.Title, roles.ToArray()); 
     context.SaveChanges(); 

     var admin = context.Roles.FirstOrDefault(m => m.Title == "admin"); 
     var wubo = context.Roles.FirstOrDefault(m => m.Title == "wubo"); 

     var funcs = new List<Function> 
     { 
      new Function 
      { 
       Title = "admin", 
       Roles = new List<Role> {admin}, 
       Functions = new List<Function> 
       { 
        new Function 
        { 
         Title = "admin1", 
         Roles = new List<Role> {admin}, 
         Functions = new List<Function> 
         { 
          new Function {Title = "admin", Roles = new List<Role> {admin}}, 
          new Function {Title = "admin", Roles = new List<Role> {admin}}, 
          new Function {Title = "wubo", Roles = new List<Role> {wubo}}, 
          new Function {Title = "admin", Roles = new List<Role> {admin}}, 
          new Function {Title = "wubo1", Roles = new List<Role> {wubo}}, 
         } 
        }, 
        new Function {Title = "admin", Roles = new List<Role> {admin}}, 
        new Function {Title = "admin", Roles = new List<Role> {admin}}, 
        new Function {Title = "wubo6", Roles = new List<Role> {wubo}}, 
        new Function {Title = "admin", Roles = new List<Role> {admin}}, 
        new Function {Title = "admin", Roles = new List<Role> {admin}}, 
       } 
      }, 
      new Function {Title = "admin", Roles = new List<Role> {admin}}, 
      new Function {Title = "admin", Roles = new List<Role> {admin}}, 
      new Function {Title = "admin", Roles = new List<Role> {admin}}, 
      new Function {Title = "wubo2", Roles = new List<Role> {wubo}}, 
      new Function {Title = "admin", Roles = new List<Role> {admin}}, 
      new Function {Title = "wubo3", Roles = new List<Role> {wubo}}, 
      new Function {Title = "wubo4", Roles = new List<Role> {wubo}}, 
      new Function {Title = "wubo5", Roles = new List<Role> {wubo}}, 
      new Function {Title = "admin", Roles = new List<Role> {admin}} 
     }; 
     context.Functions.AddOrUpdate(m => m.Title, funcs.ToArray()); 
     context.SaveChanges(); 

     var member = new List<Member> 
     { 
      new Member {UserName = "admin", Password = "000", Role = admin}, 
      new Member {UserName = "wubo", Password = "000", Role = wubo} 
     }; 
     context.Members.AddOrUpdate(m => m.UserName, member.ToArray()); 
     context.SaveChanges(); 
+0

试试这个'context.Function.Where(fn => fn.Roles.All(role => role.Title ==“admin”))' – Developer

+0

或者如果你确定一个函数不会有多个管理角色,然后'context.Function.Where(fn => fn.Roles.Count()== 1 && fn.Roles.FirstOrDefault()。Title ==“admin”)' – Developer

回答

1

听起来像是你只需要使用Role

var funcs = _ew.Query<Role>().Where(m => m.Title == "admin").Select(a => a.Functions).ToList(); 

或一些接近到那

+0

谢谢,但我错过了一些东西。我想查询一个树结构。 –