C# 查询 - 非静态方法需要目标

Cor*_*mes 4 c# linq entity-framework

我收到一条错误消息,指出“非静态方法需要一个目标”

这是导致我出错的代码,有人可以对此有所了解吗?

//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();
Run Code Online (Sandbox Code Playgroud)

Tet*_*oto 5

FirstOrDefault如果那里没有返回查询结果,该方法可能会返回空值:

var orderItem = _context.PurchaseOrderItems.FirstOrDefault(
                p => p.JobReference == item.JobReference && p.ItemNumber == item.ItemNumber);
Run Code Online (Sandbox Code Playgroud)

由于orderItem.Idthrows NullReferenceExceptionwhenorderItem为 null,它将传播到TargetException所提到的LINQ throwing (有关更多信息,请参阅此帖子此帖子)。

因此,您需要orderItem通过将第二个 LINQ 查询修改为这个查询来检查空值的存在:

return _context.DeliverySchedules.Include(d => d.PurchaseOrderItem)
       .Where(d => (orderItem != null && d.PurchaseOrderItem.Id == orderItem.Id))
       .ToList();
Run Code Online (Sandbox Code Playgroud)

注:空检查必须需要检索属性之前发生IdorderItem防止NullReferenceException

作为替代方案,if可以在不修改第二个查询的情况下使用检查空值的条件:

if (orderItem != null)
{
    return _context.DeliverySchedules.Include(d => d.PurchaseOrderItem)
           .Where(d => d.PurchaseOrderItem.Id == orderItem.Id)
           .ToList();
}
Run Code Online (Sandbox Code Playgroud)