它看起來像動態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個比特(通過施加% 8
),並檢查該值是否小於4
,這將是如果3-值從右邊位未設置。因此,例如,與MyFlagValue=14
MyFlagValue = 14 = 0b1110
MyFlagValue % 8 = 6 = 0b0110
MyFlagValue % 8 < 4 = false^which means 3-from-right bit (Flag3) is set
另一個例子,其中MyFlagValue=58
:
MyFlagValue = 58 = 0b111010
MyFlagValue % 8 = 2 = 0b000010
MyFlagValue % 8 < 4 = true ^which means 3-from-right bit (Flag3) is NOT set
因此,這可以在由動態LINQ理解的數學方式表達,以檢查是否第三標誌Flag3
不設置:
Where("MyFlagValue % 8 < 4")
對不起,我有點困惑,你真的在這裏暗示,你能給我多一點細節嗎? – 2012-04-17 15:06:35
'Where(「MyFlag%2 <1」)'將檢查不包括'Flag1 = 1'的值。這是Dynamic LINQ中缺少按位運算符支持的解決方法。 – mellamokb 2012-04-17 15:18:38
有你。謝謝:) – 2012-04-17 15:26:24