Может ли LINQ (to SQL) выполнять побитовые запросы?
-
02-07-2019 - |
Вопрос
У меня есть таблица пользователей, которая включает в себя битовую маску ролей, к которым принадлежит пользователь.Я бы хотел выбрать пользователей, которые принадлежат к одной или нескольким ролям, в значении битовой маски.Например:
select * from [User] where UserRolesBitmask | 22 = 22
При этом выбираются все пользователи, у которых в битовой маске указаны роли "2", "4" или "16".Возможно ли выразить это в запросе LINQ?Спасибо.
Решение
Я думаю, что это сработает, но я не тестировал это.Замените имя вашего объекта DataContext.ИММВ.
from u in DataContext.Users
where UserRolesBitmask | 22 == 22
select u
Другие советы
Однако в качестве дополнительного замечания для моих коллег-гуглеров:UserRolesBitmask | 22 == 22
выбирает всех пользователей, у которых нет других флагов (это не фильтр, это все равно что сказать 1==1
).
То, что вы хотите, это либо:
UserRolesBitmask & 22 == 22
который выбирает пользователей, у которых есть все роли в их битовой маске или:UserRolesBitmask & 22 != 0
который выбирает пользователей, у которых есть хотя бы одна из ролей в их битовой маске
Если это не сработает, вы всегда можете использовать ExecuteCommand
:
DataContext.ExecuteCommand("select * from [User] where UserRolesBitmask | {0} = {0}", 22);