none
Duda consulta entityframework sobre la misma tabla RRS feed

  • Pregunta

  • Buenas, tengo la siguiente consulta.

    Tengo una entidad Cita la cual tiene los atributos ¨fechaHora¨, idCita y un idCliente que es al idCliente que hace referencia la Cita.

    Estoy tratando de hacer una consulta que me devuelva las ultimas citas de los Clientes que no vinieron durante 6 meses

                                          

    DateTime fechaMeses = DateTime.Now.AddMonths(-6);
    IQueryable<Cita> citasQuery = from unaCita in context.Cita.Include("Clientes")
      from otraCita in context.Cita
    where unaCita.fechaHora<= fechaMeses && !(otraCita.fechaHora > fechaMeses) && (unaCita.idCliente == otraCita.idCliente) 
                           select unaCita;

    Se agradece si me pueden dar una mano.... soy nuevo en esto de entity framework

    viernes, 6 de julio de 2012 16:55

Todas las respuestas

  • podrias probar algo como esto

    var citasQuery = from cita in context.Cita
    				group cita by cita.idCliente into g
    				select new 
    				{
    					idcliente = g.Key,
    					cita = q.Where(x=>x.fechaHora >= fechaMeses).FirstOrDefault()
    				};

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    viernes, 6 de julio de 2012 20:06
  • podrias probar algo como esto

    var citasQuery = from cita in context.Cita
    				group cita by cita.idCliente into g
    				select new 
    				{
    					idcliente = g.Key,
    					cita = q.Where(x=>x.fechaHora >= fechaMeses).FirstOrDefault()
    				};

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    Cuando llegue a casa lo pruebo... de todos modos me explicas a que entidad hace refernecia "q" (q.Wherer..) y "x", seria a citas?

    FirsOrDefault que es lo que hace?

    Cuando pones "idcliente = g.Key", no debería ser idcliente = g.idcliente? la key de cita es idcita

    Gracias por tu respuesta y perdona que soy demasiado noob 

    lunes, 9 de julio de 2012 19:44
  • de todos modos me explicas a que entidad hace refernecia "q" (q.Wherer..) y "x", seria a citas?

    En ese caso q realmente sería g y x es el parametro de entrada de la expresión lamba que se usa para filtrar. Te recomiendo esta lectura al respecto

    Expresiones lambda (Guía de programación de C#)

    FirsOrDefault que es lo que hace?

    Selecciona el primer valor y en caso que no halla valor devuelve null. Igualmente recomiendo esta lectura

    Enumerable.FirstOrDefault (Método)

    Cuando pones "idcliente = g.Key", no debería ser idcliente = g.idcliente? la key de cita es idcita

    Esto ya es más complicado de explicar, con el select new estás creando un tipo anónimo donde defines dos propiedades, idcliente y cita. En idcliente estás poniendo la clave que se ha usado para hacer el group, en este caso idcliente (group cita by cita.idCliente into g). Una lectura que alomejor te ayuda, aunque aquí lo mejor es revisar varios enlaces en google sobre como usar group by en linq es esta

    Query Expression Syntax Examples: Grouping



    Atentamente, Sergio.

    Blog
    Twitter

    martes, 10 de julio de 2012 8:25