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(),