Can LINQ (para SQL) fazer consultas bit a bit?
-
02-07-2019 - |
Pergunta
Eu tenho uma tabela de usuários que inclui uma máscara de bits de papéis que o usuário pertence. Eu gostaria de selecionar os usuários que pertencem a um ou mais dos papéis em um valor bitmask. Por exemplo:
select * from [User] where UserRolesBitmask | 22 = 22
Isso seleciona todos os usuários que têm os papéis '2', '4' ou '16' na sua máscara de bits. Isso é possível para expressar isso em uma consulta LINQ? Obrigado.
Solução
Eu acho que isso vai funcionar, mas eu não testei it.Substitute o nome do seu objeto DataContext. YMMV.
from u in DataContext.Users
where UserRolesBitmask | 22 == 22
select u
Outras dicas
Como uma nota lateral, embora para os meus colegas Googlers:
UserRolesBitmask | 22 == 22
Seleciona todos os usuários que não têm quaisquer outras bandeiras (não é um filtro, é como dizer 1==1
).
O que você quer é:
-
UserRolesBitmask & 22 == 22
qual os usuários seleciona que têm todos os papéis em sua máscara de bits ou: -
UserRolesBitmask & 22 != 0
qual os usuários seleciona que têm pelo menos um dos papéis em sua máscara de bits
Se isso não funcionar, você pode sempre usar ExecuteCommand
:
DataContext.ExecuteCommand("select * from [User] where UserRolesBitmask | {0} = {0}", 22);