LINQ (SQL)는 비트 쿼리를 할 수 있습니까?
-
02-07-2019 - |
문제
사용자가 속한 역할의 비트 마스크를 포함하는 사용자 테이블이 있습니다. 비트 마스크 값으로 하나 이상의 역할에 속하는 사용자를 선택하고 싶습니다. 예를 들어:
select * from [User] where UserRolesBitmask | 22 = 22
이것은 비트 마스크에서 '2', '4'또는 '16'역할을 가진 모든 사용자를 선택합니다. LINQ 쿼리로 이것을 표현할 수 있습니까? 감사.
해결책
나는 이것이 효과가있을 것이라고 생각하지만, 나는 그것을 테스트하지 않았다. 당신의 datacontext 객체의 이름을 결정했다. ymmv.
from u in DataContext.Users
where UserRolesBitmask | 22 == 22
select u
다른 팁
동료 Googlers에게는 부수적으로 :UserRolesBitmask | 22 == 22
다른 플래그가없는 모든 사용자를 선택합니다 (필터가 아닙니다. 1==1
).
당신이 원하는 것은 다음과 같습니다.
UserRolesBitmask & 22 == 22
비트 마스크에 모든 역할을 가진 사용자를 선택하거나 다음과 같습니다.UserRolesBitmask & 22 != 0
비트 마스크에서 역할 중 하나 이상이있는 사용자를 선택합니다.
그래도 작동하지 않으면 항상 사용할 수 있습니다 ExecuteCommand
:
DataContext.ExecuteCommand("select * from [User] where UserRolesBitmask | {0} = {0}", 22);
제휴하지 않습니다 StackOverflow