【问题标题】:Linq Max: The cast to value type 'System.Decimal' failed because the materialized value is nullLinq Max:转换为值类型“System.Decimal”失败,因为具体化值为 null
【发布时间】:2017-08-30 20:55:29
【问题描述】:

我有一个简单的 LINQ,可以从表中获取最大值

decimal? taskId = dbContext.My_Tasks.Max(m=> m.TaskId)

当表至少有一条记录时它工作正常,但当表为空时它返回转换为值类型'System.Decimal'失败,因为具体化值为null

现在我的问题是:如果表有记录并返回最大 ID,如何仅检查一个 Linq?

【问题讨论】:

  • 如果没有记录我需要 1 作为结果

标签: c# linq


【解决方案1】:

您可能可以使用DefaultIfEmpty,在您的情况下其值为 1。比如:

dbContext.My_Tasks.Select(m => m.TaskId).DefaultIfEmpty(1).Max()

如果没有任务,这将产生一个值为 1 的集合,而 1 的 Max 就是 1。

【讨论】:

    【解决方案2】:

    max()之前将其转换为decimal?

    decimal? taskId = dbContext.My_Tasks
        .Cast<int?>()
        .Max();
    

    【讨论】:

      猜你喜欢
      • 2016-08-02
      • 1970-01-01
      • 2013-02-24
      • 2013-06-18
      • 2015-07-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多