Dans mon application, j'utilise Entity Framework.
Ma table
-Article
-period
-startDate
J'ai besoin d'enregistrements qui correspondent => DateTime.Now > startDate and (startDate + period) > DateTime.Now
J'ai essayé ce code mais il fonctionne maintenant
Context.Article
.Where(p => p.StartDate < DateTime.Now)
.Where(p => p.StartDate.AddDays(p.Period) > DateTime.Now)
Lorsque j'exécute mon code, l'exception suivante se produit
LINQ to Entities ne reconnaît pas la méthode 'System.DateTime AddDays (Double)', et cette méthode ne peut pas être traduite en une expression de magasin.
c#
linq
entity-framework
datetime
Yucel
la source
la source
period
?AddDays
est la mauvaise fonction si c'est undouble
.Réponses:
Lorsque vous utilisez LINQ to Entity Framework, vos prédicats à l'intérieur de la clause Where sont traduits en SQL. Vous obtenez cette erreur car il n'y a pas de traduction en SQL pour
DateTime.Add()
ce qui a du sens.Une solution rapide consiste à lire les résultats de la première instruction Where en mémoire, puis à utiliser LINQ to Objects pour terminer le filtrage:
Vous pouvez également essayer la méthode EntityFunctions.AddDays si vous utilisez .NET 4.0:
Remarque: dans
EF 6
c'est maintenantSystem.Data.Entity.DbFunctions.AddDays
.la source
Je pense que c'est ce que cette dernière réponse essayait de suggérer, mais plutôt que d'essayer d'ajouter des jours à p.startdat (quelque chose qui ne peut pas être converti en instruction SQL), pourquoi ne pas faire quelque chose qui peut être assimilé à SQL:
la source
EntityFunctions
solution. Ici, le deuxième opérande n'est pas extrait d'une autre entité dans la requête et peut être calculé avant la requête. Si les deux opérandes devaient être trouvés dans db, laEntityFunctions
solution serait toujours appropriée tandis que la solution de cette réponse ne fonctionnerait plus.Que diriez-vous de soustraire 2 jours de DateTime.
Pour être honnête, je ne sais pas ce que vous essayez d'accomplir, mais cela peut fonctionner
la source
Si vous avez besoin que votre expression soit traduite en SQL, vous pouvez essayer d'utiliser
System.Data.Entity.Core.Objects.AddDays.
En fait, il est marqué obsolète mais cela fonctionne. Il devrait être remplacé par System.Data.Entity.DbFunctions.AddDays mais je ne le trouve pas ...
la source