C# 在LINQ中使用SUM()时排除空值
我试图使用C# 在LINQ中使用SUM()时排除空值,c#,linq,C#,Linq,我试图使用SUM()对列中的所有条目进行合计,然后将数字转换为int 我在转换过程中遇到了问题,因为有些条目是空的。我尝试使用!=在WHERE()子句中为null,但我仍然得到相同的错误 转换为值类型Int32失败,因为具体化的值 是空的。结果类型的泛型参数或查询必须 使用可为空的类型 这是我的LINQ查询,有人能指出我遗漏了什么以便正确排除空值吗 TotalLiftings = db.Query<Transaction>(). Where(tr => tr.Termi
SUM()
对列中的所有条目进行合计,然后将数字转换为int
我在转换过程中遇到了问题,因为有些条目是空的。我尝试使用!=在WHERE()
子句中为null
,但我仍然得到相同的错误
转换为值类型Int32
失败,因为具体化的值
是空的。结果类型的泛型参数或查询必须
使用可为空的类型
这是我的LINQ查询,有人能指出我遗漏了什么以便正确排除空值吗
TotalLiftings = db.Query<Transaction>().
Where(tr => tr.TerminalId == TerminalUserData.ID &&
tr.ProductId == t.ProductId &&
tr.TransactionDate == t.InventoryDate &&
tr.NetGallons != null).
Select(tr => tr.NetGallons).
Sum();
totaliftings=db.Query()。
其中(tr=>tr.TerminalId==TerminalUserData.ID&&
tr.ProductId==t.ProductId&&
tr.TransactionDate==t.InventoryDate&&
tr.netgallens!=null)。
选择(tr=>tr.NetGallons)。
Sum();
您只需将其强制转换为可为null的int
。发生此错误的原因是您尝试对任何记录求和,结果为null
,但int
不能为null
.Select(tr => tr.NetGallons).Cast<int?>().Sum(),
NetGallons
的类型是什么?您试过NetGallons.HasValue吗?我假设NetGallons是可空的,您确定空值来自sum语句而不是where语句吗?我想说,您可能应该从where开始,首先检查tr.TerminalId和tr.ProductId、transactionDate等,以确保它们在任何其他逻辑之前都不为null。@Taugenichts我知道系统中有数据,但我不认为整个语句可能不会返回任何内容。我将调查WHERE()
,看看问题是否出在哪里。可能是重复的,但他筛选并选择了tr.NetGallons!=null
@FarhadJabiyev,零记录之和为空值。tr.NetGallons是一个int
,因此Sum
方法必须返回int
。不能将null值分配给int,因此它会引发异常。可以将int与null值进行比较,但它始终为true
.Select(tr => (int?)tr.NetGallons).Sum(),