在where-Linq查询中选择

在where-Linq查询中选择,linq,Linq,我有两个表tbl\u角色\u主机和tbl\u用户\u主机 tbl\u role\u master具有以下值 role_id role rolevalue 1 admin 1 2 gen 2 3 test1 4 4 test2 8 5 test3 16 user_id user_name rolevlue_consolidated 1 use

我有两个表
tbl\u角色\u主机
tbl\u用户\u主机

tbl\u role\u master
具有以下值

role_id   role    rolevalue
1         admin     1
2         gen       2
3         test1     4
4         test2     8
5         test3     16
user_id   user_name  rolevlue_consolidated
1         user1       15
2         user2        3
3         user3        7
rolevalue
包含Fibonacci系列。。
tbl\u user\u master
包含以下值

role_id   role    rolevalue
1         admin     1
2         gen       2
3         test1     4
4         test2     8
5         test3     16
user_id   user_name  rolevlue_consolidated
1         user1       15
2         user2        3
3         user3        7
rolevlue\u consolidated
包含在
tbl\u role\u master
表中添加的
rolevlue
组合 例如:user1的15具有admin、gen、test1和test2的角色

现在我需要一个linq查询,根据
tbl\u user\u master

对于ex if i passs
user_id
2,select查询应返回

admin
gen
我有sql查询-

select 
    role 
from 
    tbl_rol_master 
WHERE (
    select 
        rolevalue_consolidated 
    from 
        tbl_user_master 
    where 
        User_Id=" + userId + "
)

假设您有两个列表,一个包含所有角色,另一个包含所有用户,您可以执行以下操作:

var userRoles = roles.Where(role => (role.RoleValue & 
                    users.First(user => user.Id == YourUserId) == role.RoleValue);

它将返回一个列表,其中包含具有给定用户id的用户的所有分配权限。

sql查询也无效:
。。。其中(选择…)
。您必须指定搜索条件。但是sql查询工作正常。可能您没有发布真正的查询。我假设您忘记在-子句中指定
WHERE SomeColumn IN(选择rolevalue_consolidated…
此查询实际上执行斐波那契级数逻辑。但我不知道如何在linq中实现。希望您理解..请帮助。。