我收到一个错误,说"非静态方法需要一个目标">
这是导致我错误的代码,任何人都可以对此有所了解吗?
//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();
如果没有返回查询结果,则FirstOrDefault
方法可能会返回 null 值:
var orderItem = _context.PurchaseOrderItems.FirstOrDefault(
p => p.JobReference == item.JobReference && p.ItemNumber == item.ItemNumber);
由于orderItem.Id
在orderItem
null 时抛出NullReferenceException
,因此它将传播到 LINQ 抛出TargetException
,如前所述(有关详细信息,请参阅这篇文章和这篇文章)。
因此,您需要通过将第二个 LINQ 查询修改为此查询来检查是否存在orderItem
null 值:
return _context.DeliverySchedules.Include(d => d.PurchaseOrderItem)
.Where(d => (orderItem != null && d.PurchaseOrderItem.Id == orderItem.Id))
.ToList();
注意:在检索orderItem
的属性Id
之前必须进行空检查,以防止NullReferenceException
。
作为替代方法,可以使用if
条件来检查 null 值,而无需修改第二个查询:
if (orderItem != null)
{
return _context.DeliverySchedules.Include(d => d.PurchaseOrderItem)
.Where(d => d.PurchaseOrderItem.Id == orderItem.Id)
.ToList();
}
将FirstOrDefault
更改为Single
,因为在下一行中,您将访问其属性,并且您不需要NullReferenceException