¿Cómo realizo la comparación de fechas en la consulta EF?

Por favor ayuda. Estoy intentando descubrir cómo usar DATE o DATETIME para comparar en una consulta de linq.

Ejemplo: si quisiera todos los nombres de empleados para aquellos que comenzaron antes de hoy, haría algo como esto en SQL:

SELECT EmployeeNameColumn FROM EmployeeTable WHERE StartDateColumn.Date <= GETDATE() //Today 

¿Pero qué hay de linq?

 DateTime startDT = //Today var EmployeeName = from e in db.employee where e.StartDateColumn <= startDT 

El DONDE anterior no funciona:

Detalles de la excepción: System.NotSupportedException: el miembro de tipo especificado ‘Fecha’ no es compatible con LINQ to Entities. Solo se admiten inicializadores, miembros de entidades y propiedades de navegación de entidades.

Eso debería funcionar. ¿Estás seguro de que no hay otra parte de la consulta que activó la excepción? Tengo varias instancias de consultas de la forma

 var query = from e in db.MyTable where e.AsOfDate <= DateTime.Now.Date select e; 

en mi código

Use la clase DbFunctions para recortar la porción de tiempo.

 using System.Data.Entity; var bla = (from log in context.Contacts where DbFunctions.TruncateTime(log.ModifiedDate) == DbFunctions.TruncateTime(today.Date) select log).FirstOrDefault(); 

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

Puede ser debido a la fecha en la base de datos que puede contener nulos. Prueba esto:

 var EmployeeName = from e in db.employee where e.StartDateColumn.Value <= startDT 

Puede verificar la condición de esta manera

 var nextDay = DateTime.Today.AddDays(1); var query = from e in db.MyTable where e.AsOfDate >= DateTime.Today && e.AsOfDate < nextDay select e; 

aquí obtendrás los registros en la fecha de AsOfDate mientras revisamos entre hoy (00:00:00) y mañana (00:00:00) obtendremos el registro de la fecha de hoy solo en lo que pueda ser el momento ...

No puedes usar .Fecha

Si desea verificar hoy, puede crear una fecha y hora sin tiempo

 DateTime myDate = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day); var e = (from mds in myEntities.Table where mds.CreateDateTime >= myDate select mds).FirstOrDefault(); 

prueba esto:

 DateTime dd = DateTime.Parse("08/13/2010 00:00:00"); var data = from n in ContributionEligibilities where n.ModifiedDateTime.Date >= DateTime.Parse("08/13/2010").Date select n; data.Dump("Result") ; 

Tengo curiosidad por el mensaje de error que dice 'Date' , cuando estás pasando un 'DateTime' . ¿Podría ser que 'StartDateColumn' es realmente una 'Date' , en lugar de un 'DateTime' en la base de datos? Eso podría estropear la comparación …

use una variable local para almacenar el valor de Fecha y luego use esa variable en la consulta:

DateTime today = DateTime.Now.Date; from scheme in context.schemes where scheme.EndDate > today select scheme

Estoy usando un LinqDataSource y tuve problemas para que mi consulta con una Comparación de fechas se ejecute sin errores. La respuesta es usar la función WhereAddParameters y agregar el valor de prueba como un parámetro fuertemente tipado.

Vea el ejemplo a continuación donde estoy haciendo coincidir un groupid y verificando si el StopDate en mi registro es mayor o igual a un sello de fecha / hora de ahora.

Estoy usando este fragmento de código actualmente y funciona como un encanto.

 LinqCampaigns.WhereParameters.Add("StopDate", System.Data.DbType.Date, DateTime.Now.ToString()) LinqCampaigns.Where = "GroupId = " & myGrp & " && " & "StopDate >= @StopDate" 

Funciona de maravilla….

.Fecha no funcionó, pero .Day hizo por mí.

 var query = from o in Payments where o.Order.OrderDate.Day != o.PaymentDate.Day orderby o.Order.OrderDate select new { o.Order.OrderID, o.Order.OrderDate, o.PaymentDate, o.Order.FirstName, o.Order.LastName, o.Order.CustomerID }; query.Dump(); 

asegúrese de verificar el valor nulo así:

  '(from mm in _db.Calls where mm.Professionnal.ID.Equals(proid) && mm.ComposedDate.HasValue && (mm.ComposedDate.Value >= datemin) && (mm.ComposedDate.Value <= date) select mm).ToArray();'