带有连接的Linq查询和不等于的地方

时间:2014-04-11 12:26:34

标签: linq join

我有三个分别名为'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();

这将返回用户当前分配的所有权限。 如何才能获得用户尚未分配的内容?

2 个答案:

答案 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#命名约定并从实体名称中删除下划线使您的代码更好。