2011-11-16 69 views
3

實體。任何()的結果我有如下的簡單查詢:LINQ要在空引用異常

Dim sizings = From a In db.Sizings 
         Where a.Customer.ID = customer.ID 
         Select a 

If sizings.Any Then 
    ..... 

sizings.Any線被投擲一個空引用異常。我以爲我打算使用.Any來確定是否有任何行返回?

isnothing(sizings)返回false

任何想法?

編輯 - 分辨率: 不要在LINQ查詢中使用空對象!

+0

是Customer.ID可爲空? – BrokenGlass

+0

請向我們展示堆棧跟蹤。 – Steven

+0

啊,笨蛋。感謝提示傢伙,我得到的客戶對象在發生一些變化後返回null。 一切正在工作:) – Tom

回答

0

怎麼樣使用sizings.Count()> 0

+0

我想知道爲什麼這是標記下來,計數導致枚舉填充,並告訴你是否有行不是。另一種選擇是查看sizings.FirstOrDefault()!= null –

+0

也許是因爲使用.Any()你應該達到相同的結果,並且.Count()會相當慢。 – Perplexed

+1

我們通過ID要求客戶,我們很可能會在這裏返回1或0行。伯爵和任何人都是一樣的。 –

2

嘗試檢查客戶不爲空,並將它的ID之前。

Dim sizings = From a In db.Sizings 
       Where a.Customer IsNot Nothing And a.Customer.ID = customer.ID 
       Select a 

If sizings.Any() Then 
    ' 
End If 
+0

我傳遞的客戶對象本身就是null,所以我非常確定這會遭受相同的null ref異常。 – Tom

+0

我認爲它會工作,如果查詢使用AndAlso而不是And。然後,a.Customer.ID的評估不會發生,並且不會有null ref異常。 –