在 C# 中使用 lambda 检查 LINQ Sum() 方法中的值



>我必须将所有值相加在一个对象中。这些值从数据库中检索并存储在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
);

相关内容

  • 没有找到相关文章

最新更新