C#查询-非静态方法需要一个目标
我得到一个错误,说“非静态方法需要一个目标” 这是导致我出错的代码,有人能解释一下吗C#查询-非静态方法需要一个目标,c#,entity-framework,linq,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.ItemNum
//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
更改为Single
,因为在下一行中,您将获得它的属性,并且您不希望出现NullReferenceException如果没有返回任何查询结果,FirstOrDefault
方法可能返回空值:
var orderItem = _context.PurchaseOrderItems.FirstOrDefault(
p => p.JobReference == item.JobReference && p.ItemNumber == item.ItemNumber);
由于orderItem.Id
在orderItem
为空时抛出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();
}
EntityFramework.SqlServer.dll中发生类型为“System.Reflection.TargetException”的异常,但未在用户代码中处理其他信息:非静态方法需要目标。请查看此处:。。其中(d=>d.PurchaseOrderItem.Id==orderItem.Id)如果orderItem
的第一次查询返回的结果为空或没有结果,则可能会引发NRE。在使用if(orderItem!=null)
返回另一个查询之前,请尝试测试null条件。将FirstOrDefault
更改为Single
,因为在下一行中,您将访问其属性,并且不希望出现null引用异常。