LINQ从表中检索某些字段(某列的字段)与另一个表不相等的值

时间:2009-05-05 15:07:49

标签: linq

我有两个共同有一个列的表,如何检索第一个表,其列的值不等于另一个表的列的值?

以下是一个例子:

  table1ID | foo    | fooBool        table2ID | foo      | fooin
 ----------------------------        -----------------------------

     1    |  test1  | true              1     |   test2  |    5
     2    |  test2  | true              2     |   test3  |    7
     3    |  test3  | true
     4    |  test4  | false

因此,第一个表的LINQ查询结果的值foo不等于table2的值:

table1ID | foo    | fooBool
---------------------------    
   1     | test1  | true
   4     | test4  | false

2 个答案:

答案 0 :(得分:3)

var results = from t1 in db.table1
              from t2 in db.table2
              where t1.foo != t2.foo
              select t1

答案 1 :(得分:2)

您还可以使用Intersect() IEnumerable Extension

var results = db.table1.Intersect(db.table2);

或在LINQ中

var codes = from intersected in db.table1.Intersect(db.table2)
            select intersected.foo;

这会产生

 results 
 ----------
 test2
 test3

<强>更新

感谢Joe指出Intersect会产生公共项目(上面添加的示例)。你想要的是Except扩展方法。

var results = db.table1.Except(db.table2);

或在LINQ中

var codes = from diff in db.table1.Except(db.table2)
            select diff.foo;

这会产生

 results 
 ----------
 test1
 test4