LINQ从(某列的)字段不等于另一个表的表中检索值
我有两个共有一列的表,如果第一个表的列的值不等于另一个表的列的值,如何检索第一个表 以下是一个例子:LINQ从(某列的)字段不等于另一个表的表中检索值,linq,Linq,我有两个共有一列的表,如果第一个表的列的值不等于另一个表的列的值,如何检索第一个表 以下是一个例子: table1ID | foo | fooBool table2ID | foo | fooin ---------------------------- ----------------------------- 1 | test1 | true 1 | test2 | 5
table1ID | foo | fooBool table2ID | foo | fooin
---------------------------- -----------------------------
1 | test1 | true 1 | test2 | 5
2 | test2 | true 2 | test3 | 7
3 | test3 | true
4 | test4 | false
因此,对于foo值不等于表2值的第一个表,LINQ查询的结果为:
table1ID | foo | fooBool
---------------------------
1 | test1 | true
4 | test4 | false
您还可以使用IEnumerable扩展名
var results = db.table1.Intersect(db.table2);
还是在林克
var codes = from intersected in db.table1.Intersect(db.table2)
select intersected.foo;
var codes = from diff in db.table1.Except(db.table2)
select diff.foo;
这将产生
results
----------
test2
test3
results
----------
test1
test4
更新
感谢Joe指出,Intersect
将生成公共项(上面添加了示例)。您需要的是扩展方法
var results = db.table1.Except(db.table2);
还是在林克
var codes = from intersected in db.table1.Intersect(db.table2)
select intersected.foo;
var codes = from diff in db.table1.Except(db.table2)
select diff.foo;
这将产生
results
----------
test2
test3
results
----------
test1
test4
您还可以使用IEnumerable扩展名
var results = db.table1.Intersect(db.table2);
还是在林克
var codes = from intersected in db.table1.Intersect(db.table2)
select intersected.foo;
var codes = from diff in db.table1.Except(db.table2)
select diff.foo;
这将产生
results
----------
test2
test3
results
----------
test1
test4
更新
感谢Joe指出,Intersect
将生成公共项(上面添加了示例)。您需要的是扩展方法
var results = db.table1.Except(db.table2);
还是在林克
var codes = from intersected in db.table1.Intersect(db.table2)
select intersected.foo;
var codes = from diff in db.table1.Except(db.table2)
select diff.foo;
这将产生
results
----------
test2
test3
results
----------
test1
test4
intersect操作符生成两个序列的集合intersect。这与OP试图实现的目标背道而驰。Except运算符将是此处的合适运算符。好的,是的,尽管您可以使用IEqualityComparer编写一些内容。您还可以编写自己的通用扩展方法,该方法接受谓词进行比较。intersect运算符生成两个序列的intersect集合。这与OP试图实现的目标背道而驰。Except运算符将是此处的合适运算符。好的,是的,尽管您可以使用IEqualityComparer编写一些内容。您还可以编写自己的泛型扩展方法来接受谓词进行比较。