如果Sum()值返回Null使用0,目前它是否可以转换为可以为空的double?

时间:2010-11-18 10:59:33

标签: c# linq group-by nullable sum

我有一个很好的LINQ语句......它的选择部分是

 select new
 {
     Net = (System.Double?)
     ((from m0 in MOVTOS
     where m0.DocumentType == "NET" && m0.ClientCode == c.ClientCode
     group m0 by new { 0.ClientCode } into g
     select new
     {
         Expr1 = (System.Double)g.Sum(p => p.Amount)
     }).First().Expr1)
};

现在,如果你注意到我在求助时使用System.Double?(可以为空),因为某些值在SUM上返回为NULL。

如果我将其更改为System.Double,则会失败并显示错误

  

无法将null值分配给System.Double类型的成员,该类型是不可为空的值类型

所以我想要做的是返回SUM的值,但如果它是NULL,那么在那里输入一个。

任何帮助真的很感激

4 个答案:

答案 0 :(得分:5)

使用null coalescing operator

double? nullable = null;
double notNullable = nullable ?? 0;

在你的情况下:

select new
{
    Net =
        (from m0 in MOVTOS
         where m0.DocumentType == "NET" && m0.ClientCode == c.ClientCode
         group m0 by new { 0.ClientCode } into g
         select g.Sum(p => p.Amount) ?? 0).First()
};

答案 1 :(得分:1)

只需添加?? 0

即可

.First().Expr1)更改为.First().Expr1) ?? 0

答案 2 :(得分:0)

或者您可以相应地过滤您的收藏集g

List<double?> dArr = new List<double?>( )
{
   1,
   3,
   null,
   5
};

double sum = dArr.Select( item =>
   {
       if( item.HasValue == false )
          return 0;
       else
          return item;
   } ).Sum( item => item.Value );

答案 3 :(得分:0)

您可以使用种子Sum的{​​{1}}方法代替Aggregate。这不需要使用可空类型或显式转换。

0.0