我有一对一对多关系的表,即 ManyToMany表:
MENUGROUP
menuid groupid
1 4
1 5
菜单
menuid name
1 One
2 Two
组
groupid name
4 group4
5 group5
Groupuser
groupid userid
4 101
4 103
5 102
我想获得用户101的所有菜单 即
Menuid groupid name
1 4 group4
但是我写了错误的输出,尽管写了正确的连接查询。谁能帮助我在这里做错了什么?
Menuid groupid name
1 4 group4
1 5 group5
(from m in context.Menus
join mg in context.MenuGroup on m.MenuId equals mg.MenuId
join gu in context.Groupuser on mg.GroupId equals gu.GroupId
where gu.UserId == 101
select m);
我想仅包含此特定用户的群组详细信息,但此菜单也位于其他群组中。
我在json中的预期输出是
{
"menuid": 1,
"name": "One",
"groups":[
{
"groupid":4,
"name":"group4"
}
]
}
答案 0 :(得分:1)
你的linq查询看起来不错,我怀疑是数据问题,但是你想尝试以下查询来看看你得到了什么。以下查询需要声明导航属性。
var userMenus = context.GroupUser.Where(u=>u.UserId = 101).SelectMany(g=>g.Group.Menus
.Select(m=> new {Menu=m.MenuId, GroupId=g.GroupId,GroupName=g.Group.name))
.ToList();
如果您需要完整的Menu对象
var userMenus = context.GroupUser.Where(u=>u.UserId = 101).SelectMany(g=>g.Group.Menus
.Select(m=> new {Menu=m.Menu, GroupId=g.GroupId,GroupName=g.Group.name))
.ToList();
如果您不关心群组列,只需要菜单
var userMenus = context.GroupUsers.Where(u => u.UserId == 101)
.SelectMany(g => g.Group.Menus.Select(m=>m.Menu));