Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 动态表达式API-LINQ到SQL_C#_Linq To Sql_Bit Manipulation_Enumeration_Dynamic Linq - Fatal编程技术网

C# 动态表达式API-LINQ到SQL

C# 动态表达式API-LINQ到SQL,c#,linq-to-sql,bit-manipulation,enumeration,dynamic-linq,C#,Linq To Sql,Bit Manipulation,Enumeration,Dynamic Linq,我们正在使用DynamicLinq.cs类,并试图设置查询的where子句来检查按位数据值 枚举示例在枚举上具有Flags属性: None = 0 Flag1 = 1 Flag2 = 2 Flag3 = 4 我们特别想要实现的是返回不包括“Flag1”值的数据,即不包括1、3、5和7的解析值。我相信在标准LINQ中,您可以通过使用类似“&~”的东西来实现这一点,但是我们似乎无法让动态表达式API接受我们正在做的事情,结果查询的解析总是会失败 有人知道如何在动态表达式API中操作和使用位

我们正在使用DynamicLinq.cs类,并试图设置查询的where子句来检查按位数据值

枚举示例在枚举上具有Flags属性:

None = 0 

Flag1 = 1

Flag2 = 2

Flag3 = 4
我们特别想要实现的是返回不包括“Flag1”值的数据,即不包括1、3、5和7的解析值。我相信在标准LINQ中,您可以通过使用类似“&~”的东西来实现这一点,但是我们似乎无法让动态表达式API接受我们正在做的事情,结果查询的解析总是会失败


有人知道如何在动态表达式API中操作和使用位枚举吗?

快速查看动态linq源代码表明不支持位操作。

快速查看动态linq源代码表明不支持位操作。

看起来动态linq不支持位操作位操作。对于按位运算,您可以使用以下等效数学公式:

(a & 2^n == 0) <==> a % 2^(n+1) < 2^n
基本上就是这样。假设要查找排除Flag3的所有值。因为Flag3=4,也就是4=2^2,所以n=2。写这篇文章的标准方法是MyFlagValue&Flag3==0,也就是说,当按位和使用Flag3时,应该得到0,表示不包括该标志

也可以在不使用任何逐位运算符的情况下,通过应用%8获取最右边的3位,并检查该值是否小于4(如果未设置右起3位,则为该值),以数学方式表示该值。例如,MyFlagValue=14

因此,这可以用动态LINQ理解的数学方式表示,以检查是否未设置第三个标志Flag3:

Where("MyFlagValue % 8 < 4")

看起来动态LINQ不支持按位操作。对于按位运算,您可以使用以下等效数学公式:

(a & 2^n == 0) <==> a % 2^(n+1) < 2^n
基本上就是这样。假设要查找排除Flag3的所有值。因为Flag3=4,也就是4=2^2,所以n=2。写这篇文章的标准方法是MyFlagValue&Flag3==0,也就是说,当按位和使用Flag3时,应该得到0,表示不包括该标志

也可以在不使用任何逐位运算符的情况下,通过应用%8获取最右边的3位,并检查该值是否小于4(如果未设置右起3位,则为该值),以数学方式表示该值。例如,MyFlagValue=14

因此,这可以用动态LINQ理解的数学方式表示,以检查是否未设置第三个标志Flag3:

Where("MyFlagValue % 8 < 4")

很抱歉,我被你在这里的实际建议弄糊涂了,你能给我一点更详细的信息吗?MyFlag%2<1将检查哪些值不包括Flag1=1。这是解决动态LINQ中缺少逐位运算符支持的一个解决方法。我还对数学背后的逻辑以及它的工作原理做了一些解释。很抱歉,我对您在这里实际提出的建议感到有点困惑,您能给我更详细的信息吗?MyFlag%2<1将检查哪些值不包括Flag1=1。这是解决动态LINQ中缺少位运算符支持的一个解决办法。我还对数学背后的逻辑以及它的工作原理做了一些解释。
Where("MyFlagValue % 8 < 4")