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

时间:2020-03-06 14:41:45  来源:igfitidea点击:

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

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

这将选择在其位掩码中具有角色" 2"," 4"或者" 16"的所有用户。是否可以在LINQ查询中表达这一点?谢谢。

解决方案

我认为这可以用,但是我还没有测试过。用DataContext对象的名称代替。 YMMV。

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

如果那不起作用,我们可以始终使用ExecuteCommand

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

作为旁注,对我的其他Google员工来说:
UserRolesBitmask | 22 == 22选择所有没有其他标志的用户(它不是过滤器,就像说" 1 == 1")。

我们想要的是:

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