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