繁体   English   中英

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

[英]C# Query - Non Static Method Requires a Target

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

这是导致我错误的代码,是否有人可能对此有所了解?

//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.IdorderItem为null时抛出NullReferenceException ,它将传播到LINQ抛出TargetException ,如上所述(有关详细信息,请参阅此文章本文 )。

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

return _context.DeliverySchedules.Include(d => d.PurchaseOrderItem)
       .Where(d => (orderItem != null && d.PurchaseOrderItem.Id == orderItem.Id))
       .ToList();

注意:在检索orderItem属性Id之前必须进行空检查以防止NullReferenceException

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

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

FirstOrDefault更改为Single因为在下一行中您将获得其属性,并且您不需要NullReferenceException

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM