2013-07-10 45 views
0

我正在尝试使用LINQ编写左外连接。在SQL样子,使用LINQ进行左外连接 - 生成不同的输出

SELECT *     
FROM Table1 td1 
LEFT OUTER JOIN Table2 
ON td1.ColumnName = td2.ColumnName 
WHERE td2.ColumnName IS NULL     
ORDER BY SomeColumns 

如果我运行在SQL查询分析器此查询,它返回说100条记录。我转换的LINQ代码返回105条记录。

var data= (from td1in Table1 
      join td2 in Table2.Where(a => a.ColumnName == (int?)null) 
      on td1.ColumnName equals td2.ColumnName into outer 
      from x in outer.DefaultIfEmpty() 
      orderby SomeColumns 
      select td1); 

方法2: 我在2种方式为,

方法1书面LINQ这给作为,未能枚举结果

var data = from td1 in Table1 
      join td2 in Table2 
      on td1.ColumnName equals td2.ColumnName into outer 
      from item in outer.DefaultIfEmpty() 
      where item.ColumnName.Value == (int?)null 
      orderby somecolumns 
      select td1 ; 

列在使用的例外子句是可空的int类型

在SQL分析器中返回的结果似乎是正确的。 请帮助我获得相同的结果。

感谢

回答

1

尝试此查询:

var data = from td1 in Table1 
      join td2 in Table2 
      on td1.ColumnName equals td2.ColumnName into outer 
      from item in outer.DefaultIfEmpty() 
      where item == null 
      orderby somecolumns 
      select td1 ; 

在原来的查询item.ColumnName.Value == (int?)null路线是错误的,因为你试图检索所有ColumnName值,即使item为空。我纠正了它,现在它应该可以正常工作。

+0

它抛出一个异常, 'data.ToList()' 扔类型的异常 'System.NullReferenceException' \t System.Collections.Generic.List {} System.NullReferenceException我 –

+0

错误,固定,再试一次请: ) – gzaxx

+0

非常好,非常感谢:) –