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?
10 réponses
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);
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)
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....");
}
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));
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.
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. Dans les coulisses, ceci exécute une opération CONVERT(DATE, <expression>)
. Cela devrait vous permettre de comparer des dates sans l'heure.
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))
{
}