Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/256.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# 将子句绑定到列的LINQ查询_C#_Linq_Bitwise And - Fatal编程技术网

C# 将子句绑定到列的LINQ查询

C# 将子句绑定到列的LINQ查询,c#,linq,bitwise-and,C#,Linq,Bitwise And,我遇到了这个LINQ声明,在谷歌搜索了一番之后,我还没有找到一个全面的解释: var x = Context.TableName .AsNoTracking() .Where(x => (x.ColumnName & 2) == 2) .Select(x => new {col = x.Column}) .ToList(); 我没有完全理解的部分是这里的.

我遇到了这个LINQ声明,在谷歌搜索了一番之后,我还没有找到一个全面的解释:

var x = Context.TableName
               .AsNoTracking()
               .Where(x => (x.ColumnName & 2) == 2)
               .Select(x => new {col = x.Column})
               .ToList();
我没有完全理解的部分是这里的
.Where
子句

.Where(x => (x.ColumnName & 2) == 2)
我不确定该值是否解析为
'和'
子句

其他信息: 发现&表示按位AND运算符。但如何将其应用于现有价值?例如,如果列值为514,则检索该列;如果列值为512,则不检索该列。我只是想了解按位是如何检查其在所述值(514512)中的适用性的


编辑:按位输入3。应该是2

此方法允许您测试是否设置了
x.ColumnName
二进制表示形式的第二个最低有效位:

  • val&2
    屏蔽除次低有效位以外的位
  • 2
    比较检查位是否设置为
    1

这将转换为RDBMS相关的按位
运算符(SQL Server中的运算符
&

假设
ColumnName
是整数或其他一些整数类型,则
(x.ColumnName&2)
将执行按位和。由于在二进制演算中2是
0000 0000 0010
,表达式
(x.ColumnName&2)==2
意味着
x.ColumnName
的值必须与二进制演算中的模式
***1*
匹配

例如,如果x.ColumnName的值为514,则
(x.ColumnName&2)
的结果将为

0010 0000 0010 (514)
&
0000 0000 0010 (2)
= 
0000 0000 0010 (2)
0010 0000 0000 (512)
&
0000 0000 0010 (2)
= 
0000 0000 0000 (0)
表达式
(x.ColumnName&2)==2
将返回
true

如果x.ColumnName的值为512,则
(x.ColumnName&2)
的结果将为

0010 0000 0010 (514)
&
0000 0000 0010 (2)
= 
0000 0000 0010 (2)
0010 0000 0000 (512)
&
0000 0000 0010 (2)
= 
0000 0000 0000 (0)
表达式
(x.ColumnName&2)==2
将返回
false

检查此表

X
Y
为真时,只有
X&Y
为真。否则,这是错误的。 二进制中的数字2是
10
。因此,
X&2
将始终返回2(二进制
10
)或0 例如:

15&2=2

1111 (15)
&
0010 (2)
= 
0010 (2)
13&2=0

1101 (13)
&
0010 (2)
= 
0000 (0)

这篇文章很有帮助

ColumnName的类型是什么?
?按位和。。。fyiI按位输入的值有误,请再解释一遍好吗?谢谢很好的解释!