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();

如果没有返回查询结果,则FirstOrDefault方法可能会返回 null 值:

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

由于orderItem.IdorderItemnull 时抛出NullReferenceException,因此它将传播到 LINQ 抛出TargetException,如前所述(有关详细信息,请参阅这篇文章和这篇文章)。

因此,您需要通过将第二个 LINQ 查询修改为此查询来检查是否存在orderItemnull 值:

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

最新更新