LINQ 查询带有绑定到列的子句

LINQ Query with clause tied to a Column

我遇到了这个 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' 子句?

附加信息: 发现 & 表示按位与运算符。但它是如何应用于现有价值的呢?例如,如果Column 值为514,则表示正在检索,但如果为512,则表示未检索。我只想了解按位如何检查其在所述值 (514, 512) 中的适用性。

编辑:3 按位打字错误。应该是 2!

此方法可让您测试 x.ColumnName 的二进制表示的第二个最低有效位是否已设置:

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

这转换为依赖于 RDBMS 的按位 AND 运算符(SQL 服务器中的运算符 &)。

假设 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 将 return true.

如果x.ColumnName的值为512,那么(x.ColumnName & 2)的结果就是

0010 0000 0000 (512)
&
0000 0000 0010 (2)
= 
0000 0000 0000 (0)

表达式 (x.ColumnName & 2) == 2 将 return false.

勾选这个table

只有当 XY 为真时 X&Y 才为真。否则就是假的。 二进制数 2 是 10。所以,X&2 总是 return 2 (二进制 10 或 0 例如:

15 & 2 = 2

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

13 & 2 = 0

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

This文章很有帮助