Utilisation de DateTime.Add (TimeSpan) avec LINQ

Je dois exécuter une requête comme celle ci-dessous. C’est en réalité plus complexe, mais voici la partie qui compte:

var results = from b in _context.Bookings where b.ScheduleDate.Add(b.StartTime) >= DateTime.UtcNow select b; 

Mais cela donne l’erreur suivante:

LINQ to Entities ne reconnaît pas la méthode ‘System.DateTime.Add, méthode (System.TimeSpan)’, et cette méthode ne peut pas être traduite en une expression de magasin.

Comment puis-je contourner cela?

Merci d’avance.

Essayez d’utiliser la méthode SqlFunctions.DateAdd dans l’espace de noms System.Data.Objects.SqlClient . Documentation ici . Cela convertira la méthode SQL DateAdd , documentée ici . Vous voudrez peut-être aussi utiliser DateDiff , documenté ici .

En général, consultez SqlFunctions pour “les méthodes CLR (Common Language Runtime) appelant des fonctions dans la firebase database dans les requêtes LINQ to Entities”. LINQ to Entities ne peut convertir aucun appel de méthode en SQL, mais les fonctions de cette classe fonctionneront.

Votre autre option consiste à exécuter la requête LINQ to Entities (à l’aide de ToList ou quelque chose de similaire), puis à exécuter la logique en mémoire.

SqlFunctions ne fonctionne qu’avec Microsoft Sql Server.

En EF pur, vous pouvez écrire:

 DbFunctions.AddMilliseconds(x.Date, DbFunctions.DiffMilliseconds(TimeSpan.Zero, x.Time)) 

Cela fonctionne sur tous les adaptateurs de firebase database