我的模型中有一个Publication实体。我想检索从现在起不到10分钟创建的所有出版物。
var publications = myEntities.Publications.
.Where(p => p.CreationUserId == exampleId
&& (DateTime.Now - p.CreationDate).Minutes < 10);
尝试执行上述语句,我得到以下异常:“DbArithmeticExpression参数必须具有数字公共类型。”。我试图从DbFunctions类中寻找合适的函数,但没有成功。任何人都可以提出解决方案吗?
答案 0 :(得分:13)
不要在查询中执行算术 - 在查询之前执行,这样您基本上就可以指定“最早的发布创建时间”:
// Deliberate use of UtcNow - you should almost certainly be storing UTC, not
// local time...
var cutoff = DateTime.UtcNow.AddMinutes(-10);
var publications = myEntities.Publications
.Where(p => p.CreationUserId == exampleId &&
p.CreationDate >= cutoff);
请注意,即使您的原始查询 有效,也无法执行您想要的操作 - 它会返回0-10分钟前创建的出版物,60-70分钟前,120-130分钟以前等你想要TotalMinutes
。
答案 1 :(得分:7)
好的,我收到了Skeeted但是加入了对话,有点可能对其他人有用......
您要查找的方法是DbFunctions.DiffMinutes
。它给出了两个值之间的总分钟数。
var publications = myEntities.Publications.
.Where(p => p.CreationUserId == exampleId
&& DbFunctions.DiffMinutes(p.CreationDate, DateTime.Now) < 10);