C# 将子句绑定到列的LINQ查询
我遇到了这个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(); 我没有完全理解的部分是这里的.
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按位输入的值有误,请再解释一遍好吗?谢谢很好的解释!