LINQ to Dataset Left Join - PullRequest
       6

LINQ to Dataset Left Join

0 голосов
/ 16 ноября 2010

Извините, если этот вопрос уже поднимался, но после нескольких часов поиска я не могу найти способ как это исправить. Я пытаюсь создать левое соединение на 1 таблице, но когда я пытаюсь вернуть столбец на другой таблице, возникла ошибка нулевой ссылки. попробовал некоторые обходные пути, но все еще не работает.

вот мой код.

from t1 in ds.TABLE1
join t2 in ds.TABLE1
on t1.COL2 equals t2.COL1 into j1
from t3 in j1.DefaultIfEmpty()
select new { 
     t1.COL5,
     t3.COL6
};

Если я пытаюсь отобразить все столбцы из t1, все работает отлично, но как только я отображаю столбцы из t3, появляется ошибка Кажется, что нулевые строки из t3 вызывают ошибку. Как я могу определить или, скорее, предотвратить отображение пустых строк из t3? Пробовал использовать null и dbnull, но все равно безуспешно.

Я ценю любую помощь. спасибо

Ответы [ 3 ]

2 голосов
/ 16 ноября 2010

Вам необходимо обработать случаи, когда t3 равно нулю.

Например:

from t1 in ds.TABLE1
join t2 in ds.TABLE1
on t1.COL2 equals t2.COL1 into j1
from t3 in j1.DefaultIfEmpty()
select new { 
     t1.COL5,
     Col6: t3 == null ? null : t3.COL6
};
0 голосов
/ 16 ноября 2010

Очень жаль, но забыл упомянуть, что один из столбцов, вызывающих ошибку, является вычисляемым столбцом (столбцом данных с выражениями).Я изменил свойство столбца NULLVALUE с THROW EXCEPTION на (Null) и использовал inline if в моем предложении select так же, как упоминалось slacks, и это решило мою проблему.

Просто интересно, почему у linq нет способов перехватить значения DBNULL?Это может заманить в ловушку ноль, но не dbnull?какая разница?

В любом случае, моя проблема была решена.

Спасибо за помощь, ребята.

0 голосов
/ 16 ноября 2010

Добавить предложение where

from t1 in ds.TABLE1
join t2 in ds.TABLE1
on t1.COL2 equals t2.COL1 into j1
from t3 in j1.DefaultIfEmpty()
where t3 != null
select new { 
     t1.COL5,
     t3.COL6
};
...