web-dev-qa-db-fra.com

Comparer les dates en utilisant LINQ to Entities (Entity Framework)

Je dois renvoyer une liste des éléments de ma base de données qui expire à une heure prédéfinie à la date fournie par l'élément. Mon erroné code est le suivant:

return All().Where(o => new DateTime(o.expiry_date.Year, o.expiry_date.Month, o.expiry_date.Day, 17, 30, 0) >= DateTime.Now)

L'erreur que je reçois est:

Seuls les constructeurs et les initialiseurs sans paramètre sont pris en charge dans LINQ to Entities

Est-ce que quelqu'un sait comment je peux résoudre ce problème?

13
Jimbo

Utilisez EntityFunctions à la place. Peut-être CreateDateTime method.

Alors peut-être comme ça:

return All().Where(o => EntityFunctions.CreateDateTime(o.expiry_date.Year, o.expiry_date.Month, o.expiry_date.Day, 17, 30, 0) >= DateTime.Now)

Mise à jour:

Lorsque vous utilisez EF6, utilisez DbFunctions à la place.

29
Euphoric

Vous pouvez utiliser:

var result = await db.Articles
          .Where(TruncateTime(x.DateCreated) >= EntityFunctions.TruncateTime(DateTime.Now))
          .ToListAsync();
8
Mostafa Marji

Veuillez utiliser:

return All().Where(o => EntityFunctions.CreateDateTime(o.expiry_date.Year, o.expiry_date.Month, o.expiry_date.Day, 17, 30, 0) >= DateTime.Now)
1
petro.sidlovskyy