日期:2014-05-20  浏览次数:20718 次

EntityFramework代码优先模式里面的多对多查询
菜单类
    public class BaseMenu 
    {
        [Key]
        public int Id { get; set; }

        [Display(Name = "名称")]
        [Required(ErrorMessage = "不能为空!")]
        [MaxLength(50, ErrorMessage = "长度不能超过50个字符!")]
        public string Name { get; set; }

         public virtual ICollection<BaseRole> Roles { get; set; }
   }

角色类
    public class BaseRole
    {
        [Key]
        public int Id { get; set; }

        [Display(Name = "名称")]
        [Required(ErrorMessage = "不能为空!")]
        [MaxLength(50, ErrorMessage = "长度不能超过50个字符!")]
        public string Name { get; set; }

        public virtual ICollection<BaseUser> Users { get; set; }

        public virtual ICollection<BaseMenu> Menus { get; set; }
    }

用户类
 public class BaseUser
    {
        [Key]
        public int Id { get; set; }


        [Display(Name = "用户名")]
        [Required(ErrorMessage = "用户名不能为空!")]
        [MaxLength(50, ErrorMessage = "长度不能超过50个字符!")]
        public string UserName { get; set; }

        public virtual ICollection<BaseRole> Roles { get; set; }
     }


请问一下,我需要怎么根据用户Id来获取用户所属的角色下面的菜单呢?
用户与角色是多对多关系,菜单对角色是多对多关系。
请各位帮下忙,纠结好久了。
------解决方案--------------------
var roleIds= user.Roles.Select(r=>r.Id);

var menus = menu.Where(m=>m.Roles.Any(r=>roleIds.Contains(r.Id)));