0

我正在尝试使用 LINQ 编写左外连接。SQL看起来像,

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 条记录。我以两种方式编写了 LINQ,

方法一:

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:这给出了一个异常,因为未能枚举结果

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 ;

where 子句中使用的列是可为空的 int 类型

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

谢谢

4

1 回答 1

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为空。我纠正了它,现在它应该可以正常工作了。

于 2013-07-10T11:36:31.507 回答