Я пытаюсь написать левое внешнее соединение с помощью LINQ. SQL выглядит так:
SELECT *
FROM Table1 td1
LEFT OUTER JOIN Table2
ON td1.ColumnName = td2.ColumnName
WHERE td2.ColumnName IS NULL
ORDER BY SomeColumns
Если я запустил этот запрос в анализаторе SQL Query, он вернет, скажем, 100 записей. И мой преобразованный код LINQ возвращает 105 записей. Я написал 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, имеет тип int, допускающий значение NULL.
Результат, возвращаемый анализатором SQL, кажется правильным. Пожалуйста, помогите мне получить идентичные результаты.
Спасибо