在LINQ中使用SUM()时排除NULL值

时间:2014-08-13 15:06:37

标签: c# linq

我正在尝试使用SUM()来累计列中的所有条目,然后将该数字转换为int

我在转换中遇到问题,因为有些条目是NULL。我尝试在!= null子句中使用WHERE()排除它们,但我仍然遇到同样的错误

  

转换为值类型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();

1 个答案:

答案 0 :(得分:1)

您只需要投射到nullable int。发生错误的原因是您尝试不记录任何记录,结果是null,但int不能null

.Select(tr => tr.NetGallons).Cast<int?>().Sum(),

  .Select(tr => (int?)tr.NetGallons).Sum(),