¿Puede LINQ (a SQL) hacer consultas bit a bit?
-
02-07-2019 - |
Pregunta
Tengo una tabla de usuarios que incluye una máscara de bits de roles a los que pertenece el usuario. Me gustaría seleccionar usuarios que pertenezcan a uno o más de los roles en un valor de máscara de bits. Por ejemplo:
select * from [User] where UserRolesBitmask | 22 = 22
Esto selecciona a todos los usuarios que tienen los roles '2', '4' o '16' en su máscara de bits. ¿Es posible expresar esto en una consulta LINQ? Gracias.
Solución
Creo que esto funcionará, pero no lo he probado. Sustituya el nombre de su objeto DataContext. YMMV.
from u in DataContext.Users
where UserRolesBitmask | 22 == 22
select u
Otros consejos
Sin embargo, como nota al margen para mis compañeros de googlers:
UserRolesBitmask | 22 == 22
selecciona todos los usuarios que no tienen ningún otro indicador (no es un filtro, es como decir 1 == 1
).
Lo que quieres es:
-
UserRolesBitmask & amp; 22 == 22 que selecciona usuarios que tienen todos los roles en su máscara de bits o: -
UserRolesBitmask & amp; 22! = 0 que selecciona usuarios que tienen al menos uno de los roles en su máscara de bits
Si eso no funciona, siempre puede usar ExecuteCommand
:
DataContext.ExecuteCommand("select * from [User] where UserRolesBitmask | {0} = {0}", 22);