我有三个分别名为'User','User_Right'和'Right'的表。 通过使用“User_Right”表作为“用户”和“右”表之间的链接表,为用户分配权限。
我想获取当前未分配给特定用户的权限列表。 特定用户由其ID标识,并在我的查询中用作名为“userid”的参数。
到目前为止,我的查询看起来像这样。
var searchresults = (from ur in context.User_Right
join r in context.Right on ur.Right_ID equals r.Right_ID
where ur.User_ID.Equals(userid)
select r.Right_Name).ToList();
这将返回用户当前分配的所有权限。 如何才能获得用户尚未分配的内容?
答案 0 :(得分:0)
试试这样:
var searchresults = (from ur in context.User_Right
join r in context.Right on ur.Right_ID equals r.Right_ID
where ur.User_ID == userid)
select r.Right_Name,r.Right_ID).ToList();
db.Right.Where(x=> !searchresults.Contains(x.Right_ID))
或者这个:
var searchresults = (from ur in context.User_Right
join r in context.Right on ur.Right_ID equals r.Right_ID
where ur.User_ID != userid)
select r.Right_Name).ToList();
答案 1 :(得分:0)
如果两个表之间存在适当的关系,请使用关联/导航属性而不是加入。您的查询应类似于:
var searchresults = (from ur in context.User_Right
where ur.User_ID.Equals(userid)
select ur.Right.Right_Name).ToList();
您可以看到此查询更简洁,更简单。也许在您的代码中,属性ur.Right
具有不同的名称,但您明白了。
至于你的问题,试试这个:
var other_rights = (from r in context.Right
where !r.UserRight.User_ID.Equals(userid)
select r.Right_Name).ToList();
同样,也许在您的代码中,属性r.UserRight
具有不同的名称,但您明白了。
附注:遵循C#命名约定并从实体名称中删除下划线使您的代码更好。