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.

Foi útil?

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);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top