LINQ(对SQL)可以进行按位查询吗?

时间:2008-09-24 23:32:44

标签: c# linq-to-sql bitmask

我有一个用户表,其中包含用户所属角色的位掩码。我想在位掩码值中选择属于一个或多个角色的用户。例如:

select *
from   [User]
where  UserRolesBitmask | 22 = 22

这将选择位掩码中具有角色“2”,“4”或“16”的所有用户。这可以在LINQ查询中表达吗?感谢。

3 个答案:

答案 0 :(得分:13)

作为我的同事googlers的旁注: UserRolesBitmask | 22 == 22选择所有没有任何其他标记的用户(不是过滤器,就像说1==1)。

你想要的是:

  • UserRolesBitmask & 22 == 22选择在其位掩码中具有所有角色的用户或:
  • UserRolesBitmask & 22 != 0选择在其位掩码中至少具有一个角色的用户

答案 1 :(得分:8)

我认为这会有效,但我还没有测试过它。替换了你的DataContext对象的名字。因人而异。

from u in DataContext.Users
where UserRolesBitmask | 22 == 22
select u

答案 2 :(得分:0)

如果这不起作用,您可以随时使用ExecuteCommand

DataContext.ExecuteCommand("select * from [User] where UserRolesBitmask | {0} = {0}", 22);