Может ли LINQ (to SQL) выполнять побитовые запросы? - PullRequest
5 голосов
/ 25 сентября 2008

У меня есть таблица пользователей, в которой есть битовая маска ролей, к которым принадлежит пользователь. Я хотел бы выбрать пользователей, которые принадлежат к одной или нескольким ролям в значении битовой маски. Например:

select *
from   [User]
where  UserRolesBitmask | 22 = 22

Это выбирает всех пользователей, которые имеют роли «2», «4» или «16» в своей битовой маске. Возможно ли это выразить в запросе LINQ? Спасибо.

Ответы [ 3 ]

13 голосов
/ 23 августа 2009

Как примечание для моих коллег по Google: UserRolesBitmask | 22 == 22 выбирает всех пользователей, у которых нет других флагов (это не фильтр, это как сказать 1==1).

То, что вы хотите, это либо:

  • UserRolesBitmask & 22 == 22, который выбирает пользователей, у которых есть все роли в их битовой маске, или:
  • UserRolesBitmask & 22 != 0, который выбирает пользователей, у которых есть хотя бы одна из ролей в их битовой маске
8 голосов
/ 25 сентября 2008

Я думаю, что это будет работать, но я не проверял это. Замените имя вашего объекта DataContext. YMMV.

from u in DataContext.Users
where UserRolesBitmask | 22 == 22
select u
0 голосов
/ 25 сентября 2008

Если это не сработает, вы всегда можете использовать ExecuteCommand:

DataContext.ExecuteCommand("select * from [User] where UserRolesBitmask | {0} = {0}", 22);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...