2017-05-08 500 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

相关问题