C# EntityFramework 6.1.3和MySQL DbFunctions.TruncateTime不存在?

C# EntityFramework 6.1.3和MySQL DbFunctions.TruncateTime不存在?,c#,mysql,entity-framework,C#,Mysql,Entity Framework,正在尝试使用此查询获取今天输入的内容计数 var today = DateTime.Today; var unitsPassedToday = await this.db.Sessions .Where(x => DbFunctions.TruncateTime(x.FinishTime) == today) .CountAsync(); 获取以下异常: FUNCTION db.TruncateTime does not exist 我发誓我以前用过这个

正在尝试使用此查询获取今天输入的内容计数

var today = DateTime.Today;
var unitsPassedToday = await this.db.Sessions
        .Where(x => DbFunctions.TruncateTime(x.FinishTime) == today)
        .CountAsync();
获取以下异常:

FUNCTION db.TruncateTime does not exist
我发誓我以前用过这个函数。我没有对System.Data.Entity的任何引用,这是我使用Google搜索找到的唯一解决方案。这是EntityFramework的MySQL实现中的某种错误吗?显然,我可以编写一个存储过程来返回这些信息,但我有点想知道为什么这不起作用

MySQL服务器是5.5.23-enterprise

现在感觉有点傻,似乎这应该是一个简单的问题,我只是忽略了一些简单的事情

编辑:

下面是SQL实体框架生成的

SELECT
`GroupBy1`.`A1` AS `C1`
FROM (SELECT
COUNT(1) AS `A1`
FROM `sessions` AS `Extent1`
WHERE (TruncateTime(`Extent1`.`finish_time`)) = @p__linq__0) AS `GroupBy1`
我很确定TruncateTime不是一个有效的MySQL函数,为什么它会调用它?我想我还应该补充一点,我使用的是EDMX图表,而不是先编写代码。我已经在我的web.config中将codeConfigurationType添加到目标MySQL中,但是

<entityFramework codeConfigurationType="MySql.Data.Entity.MySqlEFConfiguration, MySql.Data.Entity.EF6">


MySql.Data.Entity是版本6.9.6.0,用于解决人们使用存储过程时遇到的问题

Create FUNCTION TruncateTime(dateValue DateTime) RETURNS date return Date(dateValue);
所以它非常非常混乱。但除了使用存储过程之外,我还使用了这个变体

var yesterday = DateTime.Now.AddDays(-1);

var newCustomersCount = _context
  .Customers
  .Where(x => x.RegisterDate > yesterday)
  .ToList()
  .Where(x => x.RegisterDate.Date == DateTime.Now.Date)
  .Count();

我们选择比昨天更新的所有记录。ToList()执行一个查询,然后过滤所需内容。此方法选择最少的必要记录。

我在codeproject.com上找到了一个解决方案

我已经测试了解决方案,为我工作!希望能有帮助

var data1 = context.my_model.Where(x => x.region_name == "Hong Kong" 
                        && x.price_date.Value.Year == dt.Year
                        && x.price_date.Value.Month == dt.Month
                        && x.price_date.Value.Day == dt.Day).ToList();

如果有人还需要它。。。 在哈马德的例子中,他使用了一个可为空的日期时间?因此,它具有“值”属性。。。 如果您有一个不可为空的Datetime,示例如下:

var data1 = context.my_model.Where(x => x.region_name == "Hong Kong" 
                    && x.price_date.Year == dt.Year
                    && x.price_date.Month == dt.Month
                    && x.price_date.Day == dt.Day).ToList();

看起来有点黑。据我所知,这是Oracles关于没有完全实现DbFunctions功能的问题。DateTime没有值属性。。。它有一个Date属性,但EF无法将其转换为MySQL。出于性能原因,无论如何都不应该截断日期。使用一个。