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

标签 c# entity-framework linq

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

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

//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 postthis 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/

相关文章:

c# - 使用 Microsoft Unity 进行异步/等待

c# - 有没有办法使用 XCode 创建 ASP .NET 文件?

c# - Entity Framework Core 2.1 存在 DetachedLazyLoadingWarning 问题

c# - Linq,如何指定时间戳条件?

c# - Enumerable 方法中的 GroupBy

c# - 从具有最小值的列表中返回项目

c# - 如何检查变量是否在 0 到 100 之间?

c# - 为什么我不能在 EF4 中的多对多实体上重写 GetHashCode?

.net - Entity Framework 中主细节/多表插入的最佳实践/方法

c# - Entity Framework - 只更新不为空的值