¿Cómo comparar solo Fecha sin hora en tipos de fecha y hora en Linq a SQL con Entity Framework?

¿Hay alguna manera de comparar 2 variables DateTime en Linq2Sql pero ignorar la parte Time?

La aplicación almacena elementos en el DB y agrega una fecha publicada. Quiero mantener la hora exacta, pero aún así poder sacar la fecha.

Quiero comparar 12/3/89 12:43:34 y 12/3/89 11:22:12 y hacer caso omiso de la hora del día real por lo que ambos se consideran iguales.

Supongo que puedo establecer todas las horas del día en 00:00:00 antes de comparar, pero en realidad quiero saber la hora del día en que solo quiero comparar las fechas.

Encontré un código que tiene el mismo problema y comparan el año, el mes y el día por separado. ¿Hay una mejor manera de hacer esto?

intente utilizar la propiedad Date en el objeto DateTime

 if(dtOne.Date == dtTwo.Date) .... 

Para una verdadera comparación, puede usar:

 dateTime1.Date.CompareTo(dateTime2.Date); 

Así es como lo hago para trabajar con 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 solo usa dtOne.Date == dtTwo.Date , no funcionará con LINQ (Error: el miembro de tipo especificado ‘Fecha’ no es compatible con 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...."); } 

Debe usar EntityFunctions.TruncateTime con EF <6.0 y DbFunctions.TruncateTime en EF> 6.0 alrededor de cualquier propiedad DateTime que desee usar dentro de su Linq.

Ejemplo

 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"); } 

Puede usar esto si está usando 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); 

El valor de diferencia representa el número de días para la edad. Si el valor es negativo, la fecha de inicio cae después de la fecha de finalización. Este es un buen control.

En su cláusula join o where, use la propiedad Date de la columna. Detrás de escena, esto ejecuta una operación CONVERT(DATE, ) . Esto debería permitirle comparar fechas sin tiempo.

  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)) { }