У меня есть таблица пользователей, которая включает битовую маску ролей, к которым принадлежит пользователь. Я хотел бы выбрать пользователей, которые принадлежат к одной или нескольким ролям в значении битовой маски. Например:
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);
В качестве побочного примечания для моих коллег-гуглеров:
UserRolesBitmask | 22 == 22 выбирает всех пользователей, у которых нет других флагов (это не фильтр, это как сказать 1==1).
Вы хотите либо:
UserRolesBitmask & 22 == 22, который выбирает пользователей, у которых есть все роли в их битовой маске, или:UserRolesBitmask & 22 != 0, который выбирает пользователей, у которых есть хотя бы одна из ролей в их битовой маске
Спасибо, подумал, что пробовал - должно быть, уже поздно ... :)