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
只有当 X
和 Y
为真时 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文章很有帮助
我遇到了这个 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
只有当 X
和 Y
为真时 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文章很有帮助