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 レコードを返します。私は次のように2つの方法でLINQを書きました。

方法 1:

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 句で使用される列は、null 許容の 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 ;

元のクエリでは、 nullであってもitem.ColumnName.Value == (int?)nullすべての値を取得しようとしたため、その行は間違っていました。私はそれを修正し、今では正常に動作するはずです。ColumnNameitem

于 2013-07-10T11:36:31.507 に答える