Linq a EntityFramework DateTime

En mi aplicación, estoy usando Entity Framework.

Mi mesa

-Article -period -startDate 

Necesito registros que coincidan => DateTime.Now > startDate and (startDate + period) > DateTime.Now

Intenté este código, pero ahora está funcionando

 Context.Article .Where(p => p.StartDate  p.StartDate.AddDays(p.Period) > DateTime.Now) 

Cuando ejecuto mi código, ocurre la siguiente excepción

LINQ to Entities no reconoce el método ‘System.DateTime AddDays (Double)’, y este método no se puede traducir a una expresión de tienda.

Al usar LINQ para Entity Framework, sus predicados dentro de la cláusula Where se traducen a SQL. Obtiene ese error porque no hay traducción a SQL para DateTime.Add() que tenga sentido.

Una solución rápida sería leer los resultados de la primera instrucción Where en la memoria y luego usar LINQ to Objects para finalizar el filtrado:

 Context.Article.Where(p => p.StartDate < DateTime.Now) .ToList() .Where(p => p.StartDate.AddDays(p.Period) > DateTime.Now); 

También puede probar el método EntityFunctions.AddDays si está usando .NET 4.0:

 Context.Article.Where(p => p.StartDate < DateTime.Now) .Where(p => EntityFunctions.AddDays(p.StartDate, p.Period) > DateTime.Now); 

Nota: En EF 6 ahora es System.Data.Entity.DbFunctions.AddDays .

Creo que esto es lo que la última respuesta intentaba sugerir, pero en lugar de intentar agregar días a p.startdat (algo que no se puede convertir a una statement SQL), ¿por qué no hacer algo que se puede equiparar con sql?

 var baselineDate = DateTime.Now.AddHours(-24); something.Where(p => p.startdate >= baselineDate) 

¿Qué le parece restar 2 días de DateTime.Now:

 Context.Article .Where(p => p.StartDate < DateTime.Now) .Where(p => p.StartDate > DateTime.Now.Subtract(new TimeSpan(2, 0, 0, 0))) 

Para ser sincero, no estoy seguro de lo que estás tratando de lograr, pero esto puede funcionar

Si necesita que su expresión se traduzca a SQL, puede intentar usar

Método System.Data.Entity.Core.Objects.AddDays.

En realidad, está marcado como obsoleto, pero funciona. Debería ser reemplazado por System.Data.Entity.DbFunctions.AddDays pero no puedo encontrarlo …