Id
BitTable
Name | BitId | |
---|---|---|
测试数据 | 11 | |
测试数据 | 22 | |
7 | 测试数据3 | 4 |
LINQ 联接采用以下形式:
from x in table1
join y in table2 on f(x) equals g(y)
select ...
条件的形式必须为f(x) equals g(y)
。equals
的LHS必须是table1
中元素的函数,而RHS必须是table2
中元素的函数。相反,您在这里拥有的是类似于f(x, y) equals g(x)
的东西,它不是这种形式,因此您不能在此处使用join
子句或Join
方法。
解决方法是可靠的旧where
子句:
var query = from bt in _context.BitTable
from bm in _context.BitMask
where (bm.DataMask & bt.BitId) == bt.BitId
where (bm.DataMask & 4) = 4
select new {
bt.Id, bt.Name, bt.BitId, bm.DataId, bm.DataMask
};
var dataMaskList = query.ToList();
HasFlag
的替代方案:
var query = from bt in _context.BitTable
from bm in _context.BitMask
where bm.DataMask.HasFlag(bt.BitId) && bm.DataMask.HasFlag(MaskKeys.TestData3)
select new {
bt.Id, bt.Name, bt.BitId, bm.DataId, bm.DataMask
};
var dataMaskList = query.ToList();