ダイナミックLINQはビット単位の操作をサポートしていないようです。あなたはビット演算のために、この同等の数式を使用して周りに取得することができます:
(a & 2^n == 0) <==> a % 2^(n+1) < 2^n
ダイナミックLINQライブラリは、あなたがこれを達成することができますので、MOD演算子(%
)をサポートしています:
基本的にはどのようにこれは機能します。 Flag3
を除いたすべての値を検索するとします。 Flag3 = 4
以降は、4 = 2^2
なので、n=2
です。これを書くための標準的な方法は、(MyFlagValue & Flag3 == 0
)です。つまり、ビット単位でand
をFlag3
とすると、フラグが含まれていないことを表す0が得られます。
値が3-場合、値あろう未満4
、である場合、これはまた、最も右側の3ビット(% 8
を適用することにより)をつかんで、そしてチェックすることにより、任意のビット単位の演算子を使用せずに数学的に表すことができます。 from-rightビットは設定されません。そう例えば、MyFlagValue=58
別の例として、MyFlagValue=14
MyFlagValue = 14 = 0b1110
MyFlagValue % 8 = 6 = 0b0110
MyFlagValue % 8 < 4 = false^which means 3-from-right bit (Flag3) is set
有する:
MyFlagValue = 58 = 0b111010
MyFlagValue % 8 = 2 = 0b000010
MyFlagValue % 8 < 4 = true ^which means 3-from-right bit (Flag3) is NOT set
ので、これは第3のフラグFlag3
でないかどうかをチェックするために、動的LINQによって理解される数学的な方法で表すことができます。設定:
Where("MyFlagValue % 8 < 4")
申し訳ありませんが、あなたが実際にここに示唆していることでちょっと混乱しています。もう少し詳しく教えてください。 –
'(" MyFlag%2 <1 ")'は、Flag1 = 1を除いた値をチェックします。これは、動的LINQでのビット単位の演算子サポートの欠如に対する回避策です。 – mellamokb
すみません。ありがとう:) –