2010-11-16 73 views
0

對不起,如果這個問題已經提出,但經過幾個小時的搜索,我似乎找不到如何解決這個問題的方法。我試圖在1表上創建一個左連接,但是當我嘗試返回另一個表上的列時,引發了空引用錯誤。嘗試了一些解決方法,但仍然無法正常工作。LINQ to Dataset Left加入

這是我的代碼。

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,但仍然沒有成功。

我很感激任何幫助。感謝

+0

如果't3'爲空,您希望發生什麼? – SLaks 2010-11-16 03:40:19

回答

0

添加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 
}; 
+1

這不再是_left_加入。 – SLaks 2010-11-16 03:39:50

+0

嗨erash,也試過了,仍然沒有成功,dbnull異常也被返回。 – seigfred 2010-11-16 04:20:08

2

您需要處理的情況下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

嗨Slaks,已經嘗試過內聯,如果在我的選擇,並沒有這樣做。它引發了dbnull異常的新錯誤 – seigfred 2010-11-16 04:19:01

0

很抱歉,但忘了提及,提高錯誤的列中的一個是計算列(的DataColumn與表達式)。我將列的NULLVALUE屬性從THROW EXCEPTION更改爲(Null),並在我的select子句中使用內聯,就像提到的鬆弛條件一樣,它解決了我的問題。

只是想知道,爲什麼linq沒有任何方法來捕獲DBNULL值?它可以陷阱爲空而不是dbnull?有什麼區別?

無論如何,我的問題解決了。

感謝您幫助球員。

+0

您可以調用'IsCol6Null()'。 – SLaks 2010-11-16 13:52:01