我有一个很好的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,那么在那里输入一个。
任何帮助真的很感激
答案 0 :(得分:5)
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