none
hacer una subquery en entity Framework RRS feed

  • Pregunta

  • Hola desarrolladores, en mi camino por aprender a usar entity Framework me he encontrado con el siguiente reto, espero me puedan ayudar.

    Tengo la Siguiente Consulta.

    SELECT a.ID, a.SERIAL,a.DESCRIPCION, b.IdResponsable
    FROM dbo.EQUIPO a, dbo.equipodetalle b
    WHERE a.IDESTADO = 1
    AND a.IDESTADO = b.IDESTADO
    AND a.ID = b.IDEQUIPO
    AND b.IDMOVIMIENTO = (SELECT ID 
    					  FROM dbo.MOVIMIENTO 
    					  WHERE CODIGO = 'I'
    					  AND IDESTADO = 1)
    AND b.ID = (SELECT MAX(ID) 
    			FROM equipodetalle 
    			WHERE IDEQUIPO = a.ID)
    AND a.PATRON != 'S'
    ahora esta la quiero hacer con entity Framework pero no lo he logrado, ya vi como se hacen los joins pero la subquery que hace donde busca el max(ID) no tengo la menor idea como se haría, agradezco la guía de ustedes.

    miércoles, 24 de mayo de 2017 12:58

Respuestas

  • Reproduce lo mismo que tienes en la consulta sql: recupera el valor máximo de un conjunto, por ejemplo:

    var data = (from eq in equipo
    			let detalle = (from d in equipoDetalle select d)
    			join ed in equipoDetalle on eq.ID equals ed.IDEQUIPO
    			join m in movimientos on ed.IDMOVIMIENTO equals m.ID
    			where eq.IDESTADO == 1 && eq.PATRON != "S"
    			 && m.CODIGO == "I" && m.IDESTADO == 1
    			 && ed.ID == detalle.Where(x => x.IDEQUIPO == eq.ID).Max(x => x.ID)
    			select new
    			{
    				ID = eq.ID,
    				SERIAL = eq.SERIAL,
    				DESCRIPCION = eq.DESCRIPCION,
    				IDRESPONSABLE = ed.IDRESPONSABLE
    			}).ToList();


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Marcado como respuesta CrissR jueves, 25 de mayo de 2017 15:31
    jueves, 25 de mayo de 2017 0:30

Todas las respuestas

  • hola

    si usas entity framework se supone que las entidades estan relacionadas por lo que no deberias necesitar subconsultas

    ademas lo que veo alli son queries previas que deberias obtener el valor, podrias ejecutar

    SELECT ID FROM dbo.MOVIMIENTO  WHERE CODIGO = 'I' AND IDESTADO = 1

    y obtener el id que uses en el where de linq

    la relacion entre equipo y equipodetalle lo realizas por medio del mapping de una relacion

    Entity Framework Relationships and Navigation Properties

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    miércoles, 24 de mayo de 2017 13:36
  • Hola leandro, el problema que tengo es con la subconsulta donde miro el max ID, esa es la parte que no se como hacer ya que en la consulta grande miro la misma tabla., lo del movimiento lo soluciono con un join
    miércoles, 24 de mayo de 2017 13:42
  • Reproduce lo mismo que tienes en la consulta sql: recupera el valor máximo de un conjunto, por ejemplo:

    var data = (from eq in equipo
    			let detalle = (from d in equipoDetalle select d)
    			join ed in equipoDetalle on eq.ID equals ed.IDEQUIPO
    			join m in movimientos on ed.IDMOVIMIENTO equals m.ID
    			where eq.IDESTADO == 1 && eq.PATRON != "S"
    			 && m.CODIGO == "I" && m.IDESTADO == 1
    			 && ed.ID == detalle.Where(x => x.IDEQUIPO == eq.ID).Max(x => x.ID)
    			select new
    			{
    				ID = eq.ID,
    				SERIAL = eq.SERIAL,
    				DESCRIPCION = eq.DESCRIPCION,
    				IDRESPONSABLE = ed.IDRESPONSABLE
    			}).ToList();


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Marcado como respuesta CrissR jueves, 25 de mayo de 2017 15:31
    jueves, 25 de mayo de 2017 0:30
  • Mago!!!!!!!!!

    Muchas Gracias, pensé que no se podía con linq. Te Agradezco!!!!!! ya con eso podre hacer muchas otras consultas :)

    jueves, 25 de mayo de 2017 15:31