En utilisant ce code dans Entity Framework, je reçois l'erreur suivante. J'ai besoin d'obtenir toutes les lignes pour une date spécifique, DateTimeStart
est de type DataType dans ce format2013-01-30 12:00:00.000
Code:
var eventsCustom = eventCustomRepository.FindAllEventsCustomByUniqueStudentReference(userDevice.UniqueStudentReference)
.Where(x => x.DateTimeStart.Date == currentDateTime.Date);
Erreur:
base {System.SystemException} = {"Le membre de type spécifié 'Date' n'est pas pris en charge dans LINQ to Entities. Seuls les initialiseurs, les membres d'entité et les propriétés de navigation d'entité sont pris en charge."}
Des idées comment résoudre ce problème?
Réponses:
DateTime.Date
ne peut pas être converti en SQL. Utilisez la méthode EntityFunctions.TruncateTime pour obtenir une partie de date.MISE À JOUR: Comme @shankbond mentionné dans les commentaires, dans Entity Framework 6
EntityFunctions
est obsolète, et vous devez utiliser laDbFunctions
classe, qui est fournie avec Entity Framework.la source
Vous devriez maintenant utiliser
DbFunctions.TruncateTime
la source
Je voudrais ajouter une solution, qui m'a aidé à résoudre ce problème dans le cadre d'entité:
J'espère que cela aide.
la source
EntityFunctions
est obsolète. Pensez à utiliser à laDbFunctions
place.la source
Utilisez toujours EntityFunctions.TruncateTime () pour x.DateTimeStart et currentDate. tel que :
la source
Utilisez simplement des propriétés simples.
Si les dates futures ne sont pas possibles dans votre application, alors > = x.DateTimeStart> = currentDateTime.Date est suffisant.
si vous avez des comparaisons de dates plus complexes, vérifiez les fonctions canoniques et si vous avez des fonctions EF6 + DB
Plus généralement - Pour les personnes à la recherche de problèmes Les méthodes Linq prises en charge dans EF peuvent expliquer des problèmes similaires avec les instructions linq qui fonctionnent sur les listes de base de mémoire mais pas dans EF.
la source
Simplifié:
la source
Utilisez le code ci-dessous pour utiliser EF6:
la source
Une autre solution pourrait être:
la source