Existe-t-il un moyen de comparer 2 variables DateTime dans Linq2Sql sans ignorer la partie Time?.
L'application stocke des éléments dans la base de données et ajoute une date publiée. Je veux garder l'heure exacte, mais toujours pouvoir tirer par la date elle-même.
Je veux comparer 12/3/89 12:43:34 et 12/3/89 11:22:12 et ne pas tenir compte de l'heure réelle de la journée, donc les deux sont considérés comme identiques.
Je suppose que je peux régler toutes les heures de la journée sur 00:00:00 avant de comparer, mais je souhaite en fait connaître l'heure à laquelle je souhaite simplement pouvoir comparer par date uniquement.
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. Y a-t-il une meilleure manière de faire cela?
essayez d'utiliser la propriété Date
sur l'objet DateTime
...
if(dtOne.Date == dtTwo.Date)
....
Pour une vraie comparaison, vous pouvez utiliser:
dateTime1.Date.CompareTo(dateTime2.Date);
Voici comment je le fais pour pouvoir 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 utilisez uniquement dtOne.Date == dtTwo.Date
, cela ne fonctionnera pas avec LINQ (Erreur: le membre de type spécifié 'Date' n'est pas pris en charge dans LINQ to Entities)
Si vous utilisez Entity Framework <v6.0, utilisez EntityFunctions.TruncateTime
Si vous utilisez Entity Framework> = v6.0, utilisez DbFunctions.TruncateTime
Utilisez l'une ou l'autre (en fonction de votre version EF) autour de la propriété de classe DateTime
que vous souhaitez utiliser dans votre requête Linq.
Exemple
var list = db.Cars.Where(c=> DbFunctions.TruncateTime(c.CreatedDate)
>= DbFunctions.TruncateTime(DateTime.UtcNow));
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....");
}
DateTime? NextChoiceDate = new DateTime();
DateTIme? NextSwitchDate = new DateTime();
if(NextChoiceDate.Value.Date == NextSwitchDate.Value.Date)
{
Console.WriteLine("Equal");
}
Vous pouvez l'utiliser si vous utilisez DateFields nullable.
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
}
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.
Dans votre clause join ou where, utilisez la propriété Date
de la colonne. En coulisse, ceci exécute une opération CONVERT(DATE, <expression>)
. Cela devrait vous permettre de comparer les dates sans l'heure.