Comment comparer uniquement Date sans heure dans les types DateTime dans Linq à SQL avec Entity Framework?

est un moyen de comparer 2 variables DateTime dans Linq2Sql mais de ne pas tenir compte de la partie Time.

l'application stocke des articles dans le DB et ajoute une date de publication. Je veux garder l'heure exacte, mais encore être en mesure de tirer par la date elle-même.

je veux comparer 12/3/89 12: 43:34 et 12/3/89 11:22: 12 et avoir il sans tenir compte de l'heure réelle de la journée ainsi tous les deux sont considérés comme les mêmes.

je suppose que je peux régler tous les temps de jour à 00:00:00 avant de me comparer mais je veux savoir le moment de la journée, je veux aussi être en mesure de comparer par la date.

j'ai trouvé un code qui a le même problème et ils comparent l'année, le mois et le jour séparément. Est-il une meilleure façon de le faire?

242
demandé sur Korayem 2009-03-25 22:17:43

10 réponses

essayez d'utiliser la propriété Date sur L'objet DateTime ...

if(dtOne.Date == dtTwo.Date)
    ....
421
répondu Quintin Robinson 2009-03-25 19:19:21

pour une vraie comparaison, vous pouvez utiliser:

dateTime1.Date.CompareTo(dateTime2.Date);
51
répondu Reed Copsey 2009-03-25 19:20:51

C'est comme ça que je fais ça pour travailler avec LINQ.

DateTime date_time_to_compare = DateTime.Now;
//Compare only date parts
context.YourObject.FirstOrDefault(r =>
                EntityFunctions.TruncateTime(r.date) == EntityFunctions.TruncateTime(date_to_compare));

si vous n'utilisez que dtOne.Date == dtTwo.Date cela ne fonctionnera pas avec LINQ (erreur: le type de membre spécifié 'Date' n'est pas supporté dans LINQ to Entities)

26
répondu Alejandro del Río 2014-02-17 09:30:37
DateTime dt1 = DateTime.Now.Date;
DateTime dt2 = Convert.ToDateTime(TextBox4.Text.Trim()).Date;
if (dt1 >= dt2)
{
    MessageBox.Show("Valid Date");
}
else
{
    MessageBox.Show("Invalid Date... Please Give Correct Date....");
}
12
répondu Devarajan.T 2015-09-03 15:56:51

vous devez utiliser EntityFunctions.TruncateTime avec EF < 6.0 et DbFunctions.TruncateTime dans EF > 6.0 autour de toute propriété DateTime que vous voulez utiliser à l'intérieur de votre Linq.

exemple

var list = db.Cars.Where(c=> DbFunctions.TruncateTime(c.CreatedDate) 
                                       > DbFunctions.TruncateTime(DateTime.UtcNow));
12
répondu Korayem 2016-04-17 12:27:24
DateTime? NextChoiceDate = new DateTime();
DateTIme? NextSwitchDate = new DateTime();
if(NextChoiceDate.Value.Date == NextSwitchDate.Value.Date)
{
Console.WriteLine("Equal");
}

vous pouvez utiliser ceci si vous utilisez des Champs de données nulles.

5
répondu Code Geek 2016-03-10 13:53:12
DateTime dt1=DateTime.ParseExact(date1,"dd-MM-yyyy",null);
DateTime dt2=DateTime.ParseExact(date2,"dd-MM-yyyy",null);

int cmp=dt1.CompareTo(dt2);

   if(cmp>0) {
       // date1 is greater means date1 is comes after date2
   } else if(cmp<0) {
       // date2 is greater means date1 is comes after date1
   } else {
       // date1 is same as date2
   }
4
répondu Mohan Sharma 2014-06-30 12:27:22
DateTime econvertedDate = Convert.ToDateTime(end_date);
DateTime sconvertedDate = Convert.ToDateTime(start_date);

TimeSpan age = econvertedDate.Subtract(sconvertedDate);
Int32 diff = Convert.ToInt32(age.TotalDays);

la valeur diff représente le nombre de jours pour l'âge. Si la valeur est négative, la date de début tombe après la date de fin. C'est un bon chèque.

2
répondu dgsjr 2013-08-23 14:52:06

dans votre clause join ou where, utilisez la propriété Date de la colonne. Dans les coulisses, ceci exécute une opération CONVERT(DATE, <expression>) . Cela devrait vous permettre de comparer des dates sans l'heure.

0
répondu Adam Robinson 2009-03-25 19:23:46
        int o1 = date1.IndexOf("-");
        int o2 = date1.IndexOf("-",o1 + 1);
        string str11 = date1.Substring(0,o1);
        string str12 = date1.Substring(o1 + 1, o2 - o1 - 1);
        string str13 = date1.Substring(o2 + 1);

        int o21 = date2.IndexOf("-");
        int o22 = date2.IndexOf("-", o1 + 1);
        string str21 = date2.Substring(0, o1);
        string str22 = date2.Substring(o1 + 1, o2 - o1 - 1);
        string str23 = date2.Substring(o2 + 1);

        if (Convert.ToInt32(str11) > Convert.ToInt32(str21))
        {
        }
        else if (Convert.ToInt32(str12) > Convert.ToInt32(str22))
        {
        }
        else if (Convert.ToInt32(str12) == Convert.ToInt32(str22) && Convert.ToInt32(str13) > Convert.ToInt32(str23))
        {
        }
-17
répondu Hetuk Upadhyay 2011-10-19 14:51:07