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(开始日期)都是可空的日期时间。任何建议吗?
您不能在查询中使用减法: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);