我正在開發一個項目,將Linq轉換爲SQL(我承認這很難理解),並且遇到了奇怪的情況。下面的代碼在針對Linq to SQL設計器中生成的類進行求值時正確返回結果,但在針對實體框架實體運行時無法運行。特別是如果Or子句中的任何屬性都爲空,則該進程將打破Null引用異常。我試過技術檢查空屬性,然後說,傳遞一個值,我知道不能在SearchTerm周圍短路,但他們只是導致這個LINQ返回來自實體的所有結果,我以某種方式返回真的不明白。當使用LINQ包含實體框架時的NullReference異常
Return (From values In Location.getData _
Where (values.LocName.Contains(SearchTerm) _
Or values.Address.Contains(SearchTerm) _
Or values.Address2.Contains(SearchTerm) _
Or values.City.Contains(SearchTerm) _
Or values.State.Contains(SearchTerm) _
Or values.QIM.Contains(SearchTerm) _
Or values.MacID.Contains(SearchTerm) _
Or values.Phone.Contains(SearchTerm) _
Or values.PrimServ.Contains(SearchTerm) _
Or values.Zip.Contains(SearchTerm) _
Or values.Area.Contains(SearchTerm) _
Or values.Type.Contains(SearchTerm)
) And (values.Status <> "Closed" Or status_parm = "Closed")
Select values)
正如你可以基本上是使用DbContext.SqlQuery構造查詢到數據庫中,然後被用於這個LINQ過濾結果可能猜到的實體類位置GetData方法。我意識到有幾個問題使得它不夠理想,但是有一些原因是我在開始轉換之前以這種方式編寫的,這些問題不容易改變。
不,這個解決方案不起作用。我已經嘗試了幾種類似的技術來檢查null值,然後評估它是否爲空。所有這些都會導致LINQ操作返回查詢的所有結果,或者不返回任何結果。這個解決方案沒有返回任何結果,當一個SearchTerm完美工作時,這個操作是針對Linq到SQL版本的「Location」而不是實體運行的。我不理解底層技術如何可能需要這樣一種不同的方法,因爲沒有任何東西可以使這個LINQ查詢工作。 – Brandon 2014-09-03 13:01:22
儘管如此,我認爲使用AndAlso和OrElse是更好的做法。我在VB.net方面也不是很有經驗(主要是.NET世界中的C#),我實際上已經忘記了VB.net世界中的Or/Else不同於&&和||在C#中。 – Brandon 2014-09-03 13:19:24