Может ли LINQ (to SQL) выполнять побитовые запросы?

StackOverflow https://stackoverflow.com/questions/130605

  •  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);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top