2014-07-08 112 views
0

以下查詢在某些情況下可能會引發NullArgumentException,因爲m_SelectedPayabes集合中的項目可能爲空。查詢需要如何修改,以便在遇到空引用時不會拋出NullArgumentException?與像適當的條件LINQ查詢中的空參數異常

if (m_SelectedPayabes == null) 
    m_SelectedPayabes = new List<...>(); 

或surrounf整個查詢:

var myPayables = from payable in m_Payables 
where !(from o in m_SelectedPayabes select o.PBLE.PAYABLEID).Contains(payable.PBLE.PAYABLEID)          
select payable; 

回答

0

您可以排除空值:

var myPayables = from payable in m_Payables 
       where !(from o in m_SelectedPayabes 
         where o != null 
         select o.PBLE.PAYABLEID).Contains(payable.PBLE.PAYABLEID)          
       select payable; 

或替換t他與其他東西空值(假設o.PBLE.PAYABLEID爲整數):

var myPayables = from payable in m_Payables 
       where !(from o in m_SelectedPayabes 
         select o == null ? 0 : o.PBLE.PAYABLEID).Contains(payable.PBLE.PAYABLEID)          
       select payable; 
+1

看起來好像有人正在用downvotes ... – DavidG

+1

對於每一個串行downvoter,一個串行upvoter是必要的。在這裏,我來拯救! – Tarec

+0

哈哈謝謝,你也得到我的+1。 – DavidG

1

您可以在查詢之前添加如下代碼

if (m_SelectedPayabes != null) 
{ 
    // your query 
} 
+0

正確答案。不知道你爲什麼被低估。 –

+0

@SteffenWinkler有人婉轉地回答了所有的答案... – DavidG

1

這應該這樣做。它會檢查是否m_SelectedPayabes.PBLE.PAYABLEID匹配m_Payables.PBLE.PAYABLEID並選擇m_Payables那樣做。

if (m_SelectedPayabes!= null && m_Payables!=null){ 
var x = m_Payables.Where(o => m_SelectedPayabes.Any(oo => oo.PBLE!=null && oo.PBLE.PAYABLEID == o.PBLE.PAYABLEID)); 
} 
+1

如果m_selectedPayabes爲空,它仍會失敗。見康拉德的答案。 –

+0

'm_SelectedPayabes'是一張表嗎? 'm_SelectedPayabes.PBLE'可能爲空我想,我會添加檢查。 –

+0

也可以是List <>。 –

-1

只要改變你的

from o in m_SelectedPayabes select o.PBLE.PAYABLEID 

from o in m_SelectedPayabes.Where(sp=> sp!=null) select o.PBLE.PAYABLEID 
+1

,如果m_selectedPayabes爲null,它仍會失敗。見康拉德的答案。 –

+0

我明白了,我只是不認爲有人會問這樣的問題。我認爲這是關於集合中的物品,我的壞處。 – Tarec

+0

哎呀,我在這裏錯了。 –