LINQ DB算术必须具有通用类型(日期比较)

本文关键字:类型 日期 比较 DB LINQ | 更新日期: 2023-09-27 18:11:55

我试图从使用开始和结束日期的天数最多的数据库中获得记录。我一直在Entity.dll中得到System.Argument.Exception。

错误状态:

{"DbArithmeticExpression arguments must have a numeric common type."}
下面是我的LINQ语句:
var maxDaysTask = whseTasks.Where(x => x.CompDate != null && x.TaskDate != null).Max(x => ((DateTime)x.TaskDate - (DateTime)x.CompDate).TotalDays);
CompDate(结束日期)和TaskDate(开始日期)都是可空的日期时间。任何建议吗?

LINQ DB算术必须具有通用类型(日期比较)

您不能在查询中使用减法:operator -在。net中是重载的,但在SQL Server中不是。

您可以使用SqlFunctions.DateDiff来实现您正在寻找的效果:

var maxDaysTask = whseTasks
    .Where(x => x.CompDate != null && x.TaskDate != null)
    .Max(x => SqlFunctions.DateDiff("day", x.TaskDate, x.CompDate));

我建议在这种情况下使用Nullable<T>的内置函数,如HasValue属性来检查null。因为这些是可空的结构体,你通常不能访问内部值,这就是你出错的原因。确保使用Value属性来获取实际的DateTime结构体

var maxDaysTask = whseTasks.Where(x => x.CompDate.HasValue && x.TaskDate.HasValue)
                            .Max(x => (x.TaskDate.Value - x.CompDate.Value).TotalDays);
相关文章: