EntityFramework 6.1.3 et MySQL DbFunctions.TruncateTime n’existent pas?

Essayer d’obtenir un nombre d’éléments entrés aujourd’hui à l’aide de cette requête.

var today = DateTime.Today; var unitsPassedToday = await this.db.Sessions .Where(x => DbFunctions.TruncateTime(x.FinishTime) == today) .CountAsync(); 

Obtention de l’exception suivante:

 FUNCTION db.TruncateTime does not exist 

Je jure que j’ai déjà utilisé cette fonction. Je n’ai aucune référence à System.Data.Entity, qui est la seule solution que j’ai trouvée en utilisant une recherche Google. Est-ce une sorte de bug avec l’implémentation EntityFramework de MySQL? Évidemment, je pourrais simplement écrire une procédure stockée qui renvoie cette information, mais je veux savoir pourquoi cela ne fonctionne pas?

Le serveur MySQL est 5.5.23-enterprise.

Se sentir un peu bête en ce moment, semble que cela devrait être un problème simple et je ne fais que négliger quelque chose de simple …

Modifier:

Voici le SQL Entity Framework génère …

 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` 

Je suis à peu près sûr que TruncateTime n’est pas une fonction MySQL valide, pourquoi l’appellerait-il? J’imagine que je devrais également append que j’utilise les diagrammes EDMX et non le code en premier. J’ai ajouté le codeConfigurationType dans mon web.config pour cibler MySQL si …

  

MySql.Data.Entity est la version 6.9.6.0

J’ai trouvé une solution sur codeproject.com

J’ai testé la solution, a travaillé pour moi! J’espère que ça aide

 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(); 

Pour résoudre ce problème, les personnes utilisent une procédure stockée.

 Create FUNCTION TruncateTime(dateValue DateTime) RETURNS date return Date(dateValue); 

Donc, c’est très, très désordonné. Mais à l’exception de l’utilisation de la procédure stockée, j’ai utilisé cette variante.

 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(); 

Nous sélectionnons tous les enregistrements plus récents qu’hier. .ToList () exécute une requête et ensuite nous filtrons ce que nous voulons. Cette méthode sélectionne le minimum d’enregistrements nécessaires.