首页 > 解决方案 > 带有绑定到列的子句的 LINQ 查询

问题描述

我遇到了这个 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!

标签: c#linqbitwise-and

解决方案


假设它ColumnName是整数或其他整数类型,(x.ColumnName & 2)则将执行按位与。由于 20000 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


推荐阅读