Comment comparer uniquement les composants de date de DateTime dans EF?

c# datetime-comparison entity-framework linq linq-to-entities

Question

J'ai deux valeurs de date, une déjà stockée dans la base de données et l'autre sélectionnée par l'utilisateur à l'aide de DatePicker. Le cas d'utilisation consiste à rechercher une date particulière dans la base de données.

La valeur précédemment entrée dans la base de données a toujours une composante heure de 12:00:00, la date entrée dans le sélecteur ayant une composante heure différente.

Je ne m'intéresse qu'aux composants de la date et je voudrais ignorer le composant de l'heure.

Quels sont les moyens de faire cette comparaison en C #?

Aussi, comment faire cela dans LINQ?

UPDATE: Sur LINQ to Entities, les éléments suivants fonctionnent correctement.

e => DateTime.Compare(e.FirstDate.Value, SecondDate) >= 0

Réponse acceptée

REMARQUE: au moment de la rédaction de cette réponse, la relation EF n'était pas claire (la question a été modifiée après sa rédaction). Pour une approche correcte avec EF, vérifiez la réponse de Mandeeps .


Vous pouvez utiliser la propriété DateTime.Date pour effectuer une comparaison avec une date uniquement.

DateTime a = GetFirstDate();
DateTime b = GetSecondDate();

if (a.Date.Equals(b.Date))
{
    // the dates are equal
}

Réponse populaire

Utilisez la classe EntityFunctions pour EntityFunctions la partie temporelle.

using System.Data.Objects;    

var bla = (from log in context.Contacts
           where EntityFunctions.TruncateTime(log.ModifiedDate) ==  EntityFunctions.TruncateTime(today.Date)
           select log).FirstOrDefault();

Source: http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/84d4e18b-7545-419b-9826-53ff1a0e2a62/

METTRE À JOUR

A partir de EF 6.0, les EntityFunctions sont remplacées par DbFunctions .



Related

Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow