2017-05-08 515 views
0

我收到寫着「非靜態方法需要一個目標」C#查詢 - 非靜態方法需要一個目標

這是導致我的錯誤代碼中的錯誤,會有人能夠提供一些線索這光?

//TODO: Error, Non static method requires a target. 
var orderItem = 
    _context.PurchaseOrderItems.FirstOrDefault(
     p => p.JobReference == item.JobReference && p.ItemNumber == item.ItemNumber); 
return _context.DeliverySchedules.Include(d => d.PurchaseOrderItem) 
      .Where(d => d.PurchaseOrderItem.Id == orderItem.Id) 
       .ToList(); 
+0

類型「System.Reflection.TargetException」的異常出現在EntityFramework.SqlServer.dll但不是:

作爲替代方案,所要檢查空值if條件可以在不修改第二查詢中使用在用戶代碼中處理 附加信息:非靜態方法需要目標。 –

+0

看看這裏:http://stackoverflow.com/questions/13717355/non-static-method-requires-a-target。 –

+0

'.Where(d => d.PurchaseOrderItem.Id == orderItem.Id)''如果'orderItem'具有null或沒有從第一個查詢返回的結果,則可能會拋出NRE。在使用'if(orderItem!= null)'返回另一個查詢之前,嘗試測試空條件。 –

回答

0

FirstOrDefault方法可能返回空值,如果沒有查詢結果返回有:

var orderItem = _context.PurchaseOrderItems.FirstOrDefault(
       p => p.JobReference == item.JobReference && p.ItemNumber == item.ItemNumber); 

由於orderItem.Id拋出NullReferenceExceptionorderItem爲空時,它將傳播到LINQ將TargetException作爲mentio (有關詳細信息,請參見this postthis post)。

因此,需要通過修改第二LINQ查詢到這一個從orderItem檢查空值的存在:

return _context.DeliverySchedules.Include(d => d.PurchaseOrderItem) 
     .Where(d => (orderItem != null && d.PurchaseOrderItem.Id == orderItem.Id)) 
     .ToList(); 

注:空檢查必須進行檢索的orderItem財產Id防止NullReferenceException之前。

if (orderItem != null) 
{ 
    return _context.DeliverySchedules.Include(d => d.PurchaseOrderItem) 
      .Where(d => d.PurchaseOrderItem.Id == orderItem.Id) 
      .ToList(); 
} 
0

更改FirstOrDefaultSingle,因爲在接下來的行,你會得到它的屬性,你不想要一個NullReferenceException

相關問題