我正在使用LINQ to SQL來處理數據庫查詢我正在處理的應用程序。自動檢查與LINQ查詢的NULL關係
對於這個例子的目的,假設我有一些表像這樣
- Company
- Product
- Item
- Order
,並讓說Company
有0個或更多Products
,一個Product
有0個或更多Items
和Item
有0或更多Orders
。
現在,讓我們,所以我已經獲得的Orders
一個列表,像:
IQueryable<Order> myOrders = GetMyOrders();
現在可以說,我想查詢訂單特定Company.Name
,但有一種情況,每個表父ID可以NULL
(我知道這似乎不合乎邏輯與我的示例數據,但它只是一個例子)
使得假設沒有NULL
父的ID我可以這樣做:
var filteredOrders = myOrders.Where(x => x.Item.Product.Company.Name == "Company1");
但是,這將工作正常,因爲可能有NULL
家長ID值,我需要檢查每個父對象,以確保它不是null
之前查詢下一個父(否則我會得到一個異常)。所以,我做這樣的事情:
var filteredOrders = myOrders.Where(x =>
x.Item != null &&
x.Item.Product != null &&
x.Item.Product.Company != null &&
x.Item.Product.Company.Name == "Company1");
所以我的問題:有沒有更好的辦法(在可讀性和易於編碼方面)來做到這一點不必包括所有空的檢查?沿途發現的任何空父母都應該導致排除在結果列表之外。
請防止空父母沒有意見,該數據庫將不會改變(並且是完全有效的反正)
更好的性能更好?我不這麼認爲。無論如何,我想不出你可以擺脫所有那些空檢查。更漂亮的代碼?我會和Lonli-Lokli的建議一起去。 – InBetween 2012-02-27 12:20:37
@InBetween:對不起,當我說得更好時,我的意思更多是爲了可讀性。但請記住我對Lonli-Lokli的帖子的評論,在那裏我提到期望最終讓它作爲SQL查詢運行,而不是首先返回所有結果 – musefan 2012-02-27 12:26:30
聽起來像內部聯接的完美應用程序,它將使用空引用展示所有元素。加入所有表格並按公司名稱過濾結果。 (但這不會更具可讀性) – Stephan 2012-02-27 12:56:15