我需要下面的代碼來處理任何IQueryable,即使底層存儲庫只是一個數組。這在我的單元測試中使用假存儲器陣列後備存儲器時會引發NRE。很明顯,因爲y
可能爲空,特別是在左外連接後,y
不能自行幫助,而是爲空。EF空組檢查按分組
var x = from y in SomeIQueryable
group y by y.someForeignKey
into z
select z;
我已將它更改爲以下內容。
var x = from y in SomeIQueryable
group y by y != null ? y.someForeignKey : null
into z
select z;
將像上面那樣設置組會導致在針對實際SQL後備存儲運行時出現任何問題?
不要在單元測試中使用數組,你會沒事的。當用數組或集合改變真正的實現時,你也在改變Linq provider =你的單元測試不會測試你的真實代碼。由於Linq-to-entities提供程序的性質不同,您已經發現單元測試失敗的情況,但更常見的情況是通過單元測試和失敗的運行時代碼,從而導致單元測試無用且不可靠。 –
@LadislavMrnka您的評論是有用的,但它並不真正適用,除非測試的唯一要點是檢查查詢是否有效。 – hvd
@ hvd:這就是爲什麼我把它寫成評論而不是答案。順便說一句。檢查查詢的工作意味着檢查它與你想在真實代碼中使用的提供者 - 這意味着不與虛假。 –