[英]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.Id
在orderItem
为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.