我有三个表,分别命名为"User"、"User_Right"one_answers"Right"。通过使用"user_Right"表作为"user"one_answers"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();
这将返回用户当前已分配的所有权限。如何获取用户尚未分配的?
这样尝试:
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();
如果两个表之间存在适当的关系,请使用关联/导航属性而不是联接。您的查询应该类似于:
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#命名约定并从实体名称中删除下划线可以使代码更好地阅读。