带有join和where not equals的Linq查询



我有三个表,分别命名为"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#命名约定并从实体名称中删除下划线可以使代码更好地阅读。

相关内容

  • 没有找到相关文章

最新更新