Cómo obtener las 6 p.m. del día anterior usando Entity Framework

Tengo un problema en el que tengo que realizar alguna acción en los registros de mi base de datos donde la hora actual es mayor que la hora del registro (día anterior a las 6:XNUMX p. m.)

Ejemplo: el tiempo de registro de la base de datos es Mar-02-2012 03:00 pm La hora actual es Mar-01-2012 6:01 pm

Ahora la hora actual es mayor que las 6:XNUMX p. m. del día anterior. Creo la consulta linq para eso que es así

var a = (from trip in trips                        
         where EntityFunctions.DiffMinutes(DateTime.UtcNow,
                    EntityFunctions.AddDays(new DateTime(Convert.ToDateTime(EntityFunctions.AddDays(trip.bookTime, -1)).Year,
                        Convert.ToDateTime(EntityFunctions.AddDays(trip.bookTime, -1)).Month,
                        Convert.ToDateTime(EntityFunctions.AddDays(trip.bookTime, -1)).Day,
                        18,0,0),-1)) > 0
         select trip).ToList();

Aquí lo que estaba tratando de hacer es obtener la diferencia en minutos usando EntityFunctions.DiffMinutes entre la hora actual y la creación de una nueva fecha a partir de la fecha de la base de datos actual menos 1 día y la hora de la fecha recién creada son las 6:XNUMX p. m. Pero obtuve esta excepción de Entity Framework.

Solo se admiten constructores e inicializadores sin parámetros en LINQ to Entities.

La forma en que lo estoy haciendo es muy compleja e incluso no funciona, así que por favor ayúdenme y sugieran alguna forma simple de hacerlo.

preguntado el 09 de marzo de 12 a las 14:03

1 Respuestas

Si entiendo bien tu pregunta esto es lo que necesitas:

void Main()
{
    var today = DateTime.Now;  // or UtcNow if you need to
    var todayMidnight = today.Date; 
    var yesterdayMidnight = todayMidnight.AddDays(-1);
    var yesterday6pm = yesterdayMidnight.AddHours(18);

    var trips = new List<Trip>
    {
        new Trip{ bookTime = todayMidnight },
        new Trip{ bookTime = yesterdayMidnight }
    };

    var a = trips.Where(t=>t.bookTime > yesterday6pm).ToList();
}

// Define other methods and classes here
class Trip{
    public DateTime bookTime{get;set;}
}

Puede simplificar el código de fecha a:

var yesterday6pm = DateTime.Now.Date.AddDays(-1).AddHours(18);

or

var yesterday6pm = DateTime.Now.Date.AddHours(-6);

Ciertamente, no necesita usar EntityFunctions para comparaciones de fechas simples.

respondido 09 mar '12, 16:03

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.