C# LINQ查询在LINQPad中工作,但在C中工作#
下面的C# LINQ查询在LINQPad中工作,但在C中工作#,c#,linq,asp.net-core-2.2,C#,Linq,Asp.net Core 2.2,下面的LINQ查询在LINQPad中按预期工作,但当我在Web API中使用它时,它返回可为null的对象必须有一个值异常 这是我的密码 var GRStk = (from g in GRStkB4 join t1 in opTOs on g.itemCode equals t1.itemCode into temp1 from op in temp1.DefaultIfEmpty() selec
LINQ
查询在LINQPad
中按预期工作,但当我在Web API中使用它时,它返回可为null的对象必须有一个值
异常
这是我的密码
var GRStk = (from g in GRStkB4
join t1 in opTOs on g.itemCode equals t1.itemCode into temp1
from op in temp1.DefaultIfEmpty()
select new
{
g.branchCode,
g.itemCode,
qty = g.availQty - op.opqty
}).AsEnumerable().Where(w => w.qty > 0); // exception
int ii = GRStk.Count(); // Exception with Nullable object must have a value.
我使用Asp.Net Core 2.2
我无法理解它在LINQPad中是如何工作的,这里什么是可为空的?当使用EF时,查询中的某些命令在客户端进行计算,但在LINQPad中不进行计算。i、 e如果op为null,则如果在客户端对op.opqty进行评估,则可能无法访问它 我想更改以下行可以解决您的问题:
...
select new
{
g.branchCode,
g.itemCode,
qty = g.availQty - (op!= null ? op.opqty : 0) //edit here!
}).AsEnumerable().Where(w => w.qty > 0); // exception exception
...
试试下面的:int?ii=GRStk.Count();添加问号以接受空值。请缩进您的代码。在int ii=GRStk.Count()之前;查询本身返回异常。出于提问的目的,我使用了这一行,事实上,我会在GRStk上使用foreach。数量是十进制的,所以错误是“运算符”不能应用于十进制和十进制。当我添加(w.qty???(十进制)0)>0@Ramesh我编辑了我的答案。我希望你理解这里的要点。你需要检查op是否为空。