【发布时间】:2017-05-28 14:36:47
【问题描述】:
我的任务是在特定时间段内获取一组实体。 我正在使用代码优先方法和 MySql 服务器。
用代码
IQueryable<Entity> query = dbContext.Set<Entity>().AsNoTracking();
Entity[] entities = (from e in query
let last = (from ee in query orderby ee.Id descending select ee).FirstOrDefault()
where e.Timestamp >= DbFunctions.AddHours(last.Timestamp, -hours)
select e).ToArray();
以及以下由 EF 6.1.3 生成的 SQL
SELECT
`Extent1`.`Id`,
`Extent1`.`Timestamp`
FROM `Entities` AS `Extent1` LEFT OUTER JOIN (SELECT
`Extent2`.`Id`,
`Extent2`.`Timestamp`
FROM `Entities` AS `Extent2`
ORDER BY
`Extent2`.`Id` DESC LIMIT 1) AS `Limit1` ON 1 = 1
WHERE `Extent1`.`Timestamp` >= (AddHours(`Limit1`.`Timestamp`, -(@p__linq__0)))
我遇到了一个错误
Failed in 6 ms with error: FUNCTION mydb.AddHours does not exist
事实上,我在 DB 端没有这个功能。
有人知道DbFunctions 是如何工作的吗?
UPD
类似的问题
EntityFramework 6.1.3 and MySQL DbFunctions.TruncateTime does not exist?
how to use canonical functions in Entity Framework and Mysql
【问题讨论】:
标签: mysql entity-framework linq-to-entities