LINQ查询中的NullArgument异常

时间:2014-07-08 08:15:24

标签: c# linq exception exception-handling generic-collections

以下查询在某些情况下可能会抛出NullArgumentException,因为m_SelectedPayabes集合中的项可以为null。如何修改查询,以便在遇到空引用时不会抛出NullArgumentException

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

4 个答案:

答案 0 :(得分:1)

您可以在查询之前添加以下代码:

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

或以适当的条件包围整个查询,例如:

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

答案 1 :(得分: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));
}

答案 2 :(得分: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;

或者用其他东西替换空值(假设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;

答案 3 :(得分:-1)

只需更改

即可
from o in m_SelectedPayabes select o.PBLE.PAYABLEID

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