동적 LINQ가 비트 단위 작업을 지원하지 않는 것 같습니다. 당신은 비트 연산이 동등한 수학 공식을 사용하여 주위를 얻을 수 있습니다 :
(a & 2^n == 0) <==> a % 2^(n+1) < 2^n
동적 LINQ 도서관이 수행 할 수 있도록 모드 연산자 (%
를) 지원하지 않습니다 : 기본적으로 방법
Where("MyFlag % 2 < 1")
을 이 작품. Flag3
을 제외한 모든 값을 찾으려고한다고 가정합니다. Flag3 = 4
이후로는 4 = 2^2
이므로 n=2
입니다. 이것을 쓰는 표준 방법은 (MyFlagValue & Flag3 == 0
) 일 것입니다. 즉, 비트 단위로 and
을 Flag3
으로 쓸 때, 플래그가 포함되지 않았 음을 나타내는 0을 얻어야합니다.
이것은 가장 오른쪽의 3 비트 (% 8
적용)를 잡아서 비트 단위 연산자를 사용하지 않고 수학적으로 표현할 수 있으며 값이 4
보다 작은 지, 오른쪽에서부터 비트가 설정되지 않습니다. 제 플래그 Flag3
그렇지 않으면 확인
MyFlagValue = 58 = 0b111010
MyFlagValue % 8 = 2 = 0b000010
MyFlagValue % 8 < 4 = true ^which means 3-from-right bit (Flag3) is NOT set
그래서 동적 LINQ 이해하는 수학 식으로 표현 될 수있다 : MyFlagValue=58
가 MyFlagValue=14
MyFlagValue = 14 = 0b1110
MyFlagValue % 8 = 6 = 0b0110
MyFlagValue % 8 < 4 = false^which means 3-from-right bit (Flag3) is set
다른 예, 예를 들어 그럼 세트 :
Where("MyFlagValue % 8 < 4")
죄송합니다. 귀하가 실제로 여기 제안하신 내용으로 조금 혼란 스럽습니다. 조금 더 자세하게 설명해 주시겠습니까? –
'("MyFlag % 2 <1")은'Flag1 = 1'을 제외한 값을 확인합니다. 동적 LINQ에서 비트 단위 연산자 지원이 부족한 경우 해결 방법입니다. – mellamokb
나왔습니다. 고마워요 :) –