我遇到了这个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'
子句?
其他信息: 发现&表示按位AND运算符。但是如何将其应用于现有价值?例如,如果“列”值为514,则正在检索它,但如果它是512,则未检索它。我只想了解按位检查如何在所述值(514,512)中检查其适用性。
编辑:错别字按3。应该是2!
答案 0 :(得分:2)
假设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)
,表达式(x.ColumnName & 2) == 2
将返回true
。
如果x.ColumnName的值为512,则(x.ColumnName & 2)
的结果将为
0010 0000 0000 (512)
&
0000 0000 0010 (2)
=
0000 0000 0000 (0)
,表达式(x.ColumnName & 2) == 2
将返回false
。
答案 1 :(得分:1)
这种方法可让您测试x.ColumnName
的二进制表示形式的第二个最低有效位是否已设置:
val & 2
掩盖了第二个最低有效位以外的其他位2
进行比较,以检查该位是否设置为1
。这将转换为依赖RDBMS的按位AND
运算符(SQL Server中的运算符&
)。
答案 2 :(得分:0)
检查此表
仅当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)
This文章真的很有帮助