none
Conversión de Fechas en Linq RRS feed

  • Pregunta

  • Hola

    Necesito filtrar un informe por fecha que paso por parámetro para lo cual tengo que utilizar linq y tengo una consulta como la siguiente:

    var leer = (from auditoria in mae.Auditoria.Include("NewVariables").Where(p => p.Central.idCentral == idCentral && p.NewVariables.Nombre == nomItem && p.idUsuario == idUsuario && Convert.ToDateTime(p.Fecha.ToShortDateString()) == cFecha)
                            select new vAuditoria { Fecha = auditoria.Fecha, Item = auditoria.NewVariables.Nombre, MesNumero = auditoria.Mes, Periodo = auditoria.Periodo, idUsuario = (from usuario in mae.User where usuario.UserName.Trim().ToUpper() == auditoria.idUsuario.Trim().ToUpper() select usuario.Name).FirstOrDefault(), Valor_Ant = auditoria.Valor_Ant, Valor_Nuevo = auditoria.Valor_Nuevo, Hora = auditoria.Fecha }).ToList();

    El problema surge en esta linea:

    Convert.ToDateTime(p.Fecha.ToShortDateString()) == cFecha

    p.Fecha es la fecha que me devuelve la consulta la cual es por ejemplo 21/10/2012 15:45:22 y cFecha es la que paso por parámetro que tiene como valor por ejemplo 21/10/2012 00:00:00.

    Por ejemplo si la fecha que ingreso por parámetro es 21/10/2012 no me devuelve nada porque las fechas que devuelve la consulta tienen distintos horarios y al no ser iguales no devuelve nada. Por esta razón quise convertir p.Fecha al formato de fecha corta para que asi funcione la igualdad pero da error. No da error al compilar pero si en tiempo de ejecución. El error es el siguiente:

    "LINQ to Entities does not recognize the method 'System.DateTime ToDateTime(System.String)' method, and this method cannot be translated into a store expression"

    ¿como puedo hacer para igualar las fechas en linq? ¿hay alguna forma de convertir la fecha de la consulta al formato corto?

    Gracias, Saludos


    jueves, 27 de diciembre de 2012 13:38

Respuestas

  • es que entonces deberias realizar una consulta por rango o sea

    que sea mayor a 21/10/2012 00:00:00 y menor a 21/10/2012 23:59:59

    eso si quieres usar solo linq simple sin nungun metodo y se puedan convertir a sql

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    • Marcado como respuesta Marcos Carballo jueves, 27 de diciembre de 2012 19:43
    jueves, 27 de diciembre de 2012 19:18

Todas las respuestas

  • estas usando linq to sql o Entity Frmaework ? porque si es asi no puedes usar las funcines de conversion de .net, porque eso no se puede traducir a sql

    ademas p.Fecha deberia ser del tipo Datetime si es con este tipo de dato que lo persistes en la db

    salvo que uses algun

    SqlMethods Methods

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    jueves, 27 de diciembre de 2012 17:29
  • si, perdón, es Entity Framework y p.Fecha es del tipo DateTime. Lo que necesito entonces es quitarle la hora minutos y segundos para poder compararlo con el parámetro cFecha, o sea que tenga en cuenta solo la fecha y no la hora.

    Gracias, Saludos

    jueves, 27 de diciembre de 2012 18:47
  • es que entonces deberias realizar una consulta por rango o sea

    que sea mayor a 21/10/2012 00:00:00 y menor a 21/10/2012 23:59:59

    eso si quieres usar solo linq simple sin nungun metodo y se puedan convertir a sql

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    • Marcado como respuesta Marcos Carballo jueves, 27 de diciembre de 2012 19:43
    jueves, 27 de diciembre de 2012 19:18
  • Muchas Gracias Leandro, lo hice asi con los rangos y me funciona correctamente.

    Saludos

    jueves, 27 de diciembre de 2012 19:43