EntityFramework代码优先模式里面的多对多查询

coolhots 2013-10-16 10:06:33
菜单类
    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来获取用户所属的角色下面的菜单呢?
用户与角色是多对多关系,菜单对角色是多对多关系。
请各位帮下忙,纠结好久了。
...全文
251 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
coolhots 2013-10-17
  • 打赏
  • 举报
回复
这样只能查出某个用户属于那些角色,并不能查出他拥有的角色关联的菜单啊!
q107770540 2013-10-17
  • 打赏
  • 举报
回复
update:
var query= from r in db.BaseRoles
           where db.BaseUers.Where(u=>u.Id==yourUserId).SelectMany(u=>u.BaseRoles.Select(x=>x.Id))
                   .Contains(r.Id)
           select r;
q107770540 2013-10-17
  • 打赏
  • 举报
回复
var query= from r in db.BaseRoles
           where db.BaseUers.Where(u=>u.Id==yourUserId).SelectMany(u=>u.BaseRoles.Select(r=>r.Id))
                   .Contains(r.Id)
           select r;
biind 2013-10-17
  • 打赏
  • 举报
回复
linq语法都忘记了,就记得from。。。。select。。。 楼上的意思,楼主参考,可以滴!
feiyun0112 2013-10-17
  • 打赏
  • 举报
回复
var roleIds= user.Roles.Select(r=>r.Id); var menus = menu.Where(m=>m.Roles.Any(r=>roleIds.Contains(r.Id)));
q107770540 2013-10-17
  • 打赏
  • 举报
回复

var query=from bm in db.BaseMenus
          join brm in db.BaseRoleMenu on bm.Id equals brm.MenuId
          join br in db.BaseRole on brm.RoleId equals br.Id
          join bur in db.BaseUserRoles on br.Id equals bur.RoleId
          join bu in db.BaseUsers on bur.UserId equals bu.Id
          where bu.Id==206
          select bm;
coolhots 2013-10-16
  • 打赏
  • 举报
回复
这是数据库视图的查询,各位大神请帮我看看怎么写成linq的查询,谢谢诶各位哦!

17,740

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 .NET Framework
社区管理员
  • .NET Framework社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧