0
我寫了下面的SQL查詢空引用異常()
SELECT *
FROM dbo.PR_ADDRESS LEFT OUTER JOIN
dbo.Book_MarkText ON dbo.PR_ADDRESS.GroupID = dbo.Book_MarkText.BMData
where
dbo.PR_ADDRESS.GroupID = dbo.Book_MarkText.BMData
OR
PR_ADDRESS.GroupID in ('001','002','003')
以LINQ作爲
string[] srGroupIDs = new string[] { "001", "002", "003" };
var objResult =
(from PR_ADDRESS in dtPR_ADDRESS.AsEnumerable()
join
Book_MarkText in dtBookmarkText.AsEnumerable() on
(string)PR_ADDRESS["GroupID"] equals (string)Book_MarkText["BMData"]
into Book_MarkText_join
from Book_MarkText_Temp in Book_MarkText_join.DefaultIfEmpty()
where srGroupIDs.Contains(PR_ADDRESS["Groupid"])
|| ((string)PR_ADDRESS["Groupid"] == (string)Book_MarkText_Temp["BMData"])
select new
{
ID = PR_ADDRESS["ID"],
Name1 = PR_ADDRESS["Name1"]
}).ToList();
但給我就行空引用異常
where srGroupIDs.Contains(PR_ADDRESS["Groupid"])
|| ((string)PR_ADDRESS ["Groupid"] == (string)Book_MarkText_Temp["BMData"])
爲什麼?
如果我刪除.DefaultIfEmpty()
,這個工程無一例外,但我需要'左外部聯接',所以不能刪除.DefaultIfEmpty()
。我如何解決它?
編輯: -
我添加了OR情況下,也希望現在很明顯
那麼你需要處理其中'Book_MarkText_Temp'是空的情況下,因爲這是'DefaultIfEmpty()'那樣 - 它會是空的,你最終用一個默認值的序列...在這種情況下爲null。目前還不清楚,爲什麼你有'where'子句,因爲你只是*完成*加入... –
我不能刪除where子句,因爲where子句中還有OR條件,這是至關重要的,在問題中沒有提到。 – pravprab
對,所以你決定留下重要的信息,這使得它很難幫助你。您提供的where子句在SQL和LINQ中都是毫無意義的。你正在做一個連接,然後檢查連接是否正常工作,基本上......但是同時把它變成一個內部連接。 –