我有一个简单的方法,可以从EntityFramework中的DbSet
获取所有最近修改的对象:
public List<JobModel> GetJobs()
{
return db.Jobs
.Include(j => j.JobStatus)
.Include(j => j.JobResolution)
.Include(j => j.Process)
.Where(j => (DateTime.Now - j.ModifiedDtm).Days < 2)
.ToList();
}
这很好,没有查询的.Where(...)
部分。但是,当我添加最后一点时,我得到以下三个例外:
抛出异常:EntityFramework.dll中的'System.ArgumentException'
抛出异常:EntityFramework.dll中的'System.ArgumentException'
抛出异常:EntityFramework.SqlServer.dll中的'System.ArgumentException'
db.Jobs
中的所有行的有效值ModifiedDtm
在DateTime.Now
之前。我究竟做错了什么?我尝试将Where()
方法移到Include()
上方,但是没有运气...
更新
由于@CamiloTerevinto,我得到了一条更为翔实的错误消息。我仍然不明白到底是什么意思...
DbArithmeticExpression参数必须具有数字通用类型。
答案 0 :(得分:5)
我很确定您正在寻找DbFunctions.DiffDays
函数:
return db.Jobs
.Include(j => j.JobStatus)
.Include(j => j.JobResolution)
.Include(j => j.Process)
.Where(j => DbFunctions.DiffDays(j.ModifiedDtm, DateTime.Now) < 2)
.ToList();
答案 1 :(得分:0)
您不能在Entity Framework的DateTime.Now
子句中使用Where
。这是因为EF查询被转换为SQL查询,并且DateTime.Now
在SQL中不存在。您应该尝试获取查询的前一天并将其作为长变量传递。