我收到一条错误消息,提示“非静态方法需要一个目标”
这是导致我出错的代码,任何人都可以对此有所了解吗?
//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
为 null 时 orderItem.Id
抛出 NullReferenceException
,它将传播到 LINQ 抛出 TargetException
作为问题中提到(有关更多信息,请参阅 this post 和 this post)。
因此,您需要通过将第二个 LINQ 查询修改为这个查询来检查 orderItem
是否存在空值:
return _context.DeliverySchedules.Include(d => d.PurchaseOrderItem)
.Where(d => (orderItem != null && d.PurchaseOrderItem.Id == orderItem.Id))
.ToList();
注意:在检索 orderItem
的属性 Id
之前必须进行 Null 检查,以防止 NullReferenceException
。
作为替代方案,可以在不修改第二个查询的情况下使用 if
条件来检查空值:
if (orderItem != null)
{
return _context.DeliverySchedules.Include(d => d.PurchaseOrderItem)
.Where(d => d.PurchaseOrderItem.Id == orderItem.Id)
.ToList();
}
关于C# 查询 - 非静态方法需要目标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43842694/