我必须求和一个对象中的所有值。从数据库中检索值并将其存储在List<T>
中。如果其中一个值等于-1,我想在总和中使用0。
以下是我用来执行任务的代码:
lprod_projectionActualvalue = lprod_monthlyReport.Sum(m => new
{
Monthly_ActualValue = (m.Monthly_ActualValue != -1) ?
m.Monthly_ActualValue : 0F
});
Monthly_ActualValue 的类型为浮动?。编译器给出了一个错误,指出我无法将匿名类型转换为浮动?。这很奇怪,因为我在Select子句中使用相同的代码而没有收到任何错误。 可能是什么问题?
由于
弗朗西斯
答案 0 :(得分:7)
您正在使用new {}
关键字和括号创建一个新的匿名类型,它永远不会转换为浮点数。如果你想要求和是一个浮点数,删除匿名类型声明,只需指定生成浮点数的表达式,如下所示:
lprod_projectionActualvalue = lprod_monthlyReport.Sum(m => (m.Monthly_ActualValue != -1) ? m.Monthly_ActualValue : 0F);
答案 1 :(得分:4)
问题是你使用new { ... }
创建一个匿名类型没有特别明显的原因...... Sum
不知道如何添加匿名类型的值尝试这个:
lprod_projectionActualvalue = lprod_monthlyReport
.Sum(m => m.Monthly_ActualValue != -1 ? m.Monthly_ActualValue : 0F);
使用可空类型和魔法“不计数”值(-1)让我感到有些惊讶。通常你只需要其中一个选项 - 但我会接受你的意思,这真的是你想要的:)
(我建议你看一下.NET naming conventions ......这些下划线不是常规的,我不清楚lprod
的意思。只是一般建议。)
答案 2 :(得分:1)
我会先尝试添加一个select,然后调用Sum方法
lprod_projectionActualvalue = lprod_monthlyReport.Select(m => new
{
Monthly_ActualValue = (m.Monthly_ActualValue != -1) ? m.Monthly_ActualValue : 0F
}).Sum(m => m.Monthly_ActualValue);
答案 3 :(得分:1)
你的lambda没有返回float
。它声明了一个具有单个float
属性Monthly_ActualValue
的新匿名类型。您不能Sum
此类型的对象,因为没有为其定义添加。
请改为尝试:
lprod_projectionActualvalue = lprod_monthlyReport.Sum(m =>
(m.Monthly_ActualValue != -1) ? m.Monthly_ActualValue : 0F
);