none
left join en SQL muestra bien la informacion pero una consulta en MVC3 muestra datos diferentes RRS feed

  • Pregunta

  • hola tengo un problema con una consulta en LINQ en MVC3

    la consulta en SQL es:

    SELECT     dbo.tablaPersonal.rpe, dbo.tablaPersonal.id, dbo.tablaPersonal.nombres + ' ' + dbo.tablaPersonal.paterno + ' ' + dbo.tablaPersonal.materno AS nombreCompleto, 
                          dbo.tablaPersonalEmail.email
    FROM         dbo.tablaPersonal LEFT OUTER JOIN
                          dbo.tablaPersonalEmail ON dbo.tablaPersonal.id = dbo.tablaPersonalEmail.idPer

    con la que generé una vista llamada vistaEmails

    en SQL hago esta consulta

    SELECT TOP 1000 [rpe]
          ,[id]
          ,[nombreCompleto]
          ,[email]
      FROM [SIP].[dbo].[vistaEmails] WHERE id = 11149

    y me genera esta salida

    rpe id nombreCompleto email
    12791 11149 Carlos Eduardo Martínez Torres carlos.torres@uaslp.mx
    12791 11149 Carlos Eduardo Martínez Torres correo2@hotmail.com
    12791 11149 Carlos Eduardo Martínez Torres correo3@gmail.com

    lo cual esta bien pero en MVC3 hize esta consulta:

    var p = db.vistaEmails.Where(w => w.id == 11149).ToList();

    y me genera esta salida:

    nombreCompleto email
    Carlos Eduardo Martínez Torres carlos.torres@uaslp.mx Edit | Details | Delete
    Carlos Eduardo Martínez Torres carlos.torres@uaslp.mx Edit | Details | Delete
    Carlos Eduardo Martínez Torres carlos.torres@uaslp.mx Edit | Details | Delete

    como puedo resolverlo, ya que solo me toma el primer correo registrado de la persona en ASP pero en SQL si los muestra bien

    de antemano muchas gracias

    martes, 30 de octubre de 2012 15:04

Respuestas

  • Alberto, muchas gracias por tu tiempo, efectivamente fue lo primero que revise sin embargo no era ese el problema, pero ya lo resolví, gracias a una liga que encontré en este mismo foro que me sirvió de base para mi código esta es liga liga de tutorial el código que generé me quedo así, por si a alguien puede ayudarle

    var consultaNombres = (from personas in db.tablaPersonal
                                            join correos in db.tablaPersonalEmail on personas.id equals correos.idPer into personasCorreo
                                            from pCorr in personasCorreo.DefaultIfEmpty()
                                            select new
                                            {
                                                nombres = personas.nombres,
                                                paterno = personas.paterno,
                                                materno = personas.materno,                                             
                                                rpe = personas.rpe,
                                                id = personas.id,
                                                correo = pCorr.email
                                            }).Where(v => v.nombres.Contains(cad) || v.paterno.Contains(cad) || v.materno.Contains(cad)).ToList();

    muchisimas gracias por tu tiempo y el de quienes lo leyeron.

    Carlos

    • Marcado como respuesta MartinezCarlos martes, 30 de octubre de 2012 21:22
    martes, 30 de octubre de 2012 21:22

Todas las respuestas

  • Dudo mucho que el problema esté en la evaluación del SQL desde MVC3. Debe ser un problema en el código de la Vista. Seguramente algo se ha escapado, y tienes un bucle que itera sobre el número de elementos de la lista que pasas como Modelo, pero a la hora de escribir escribe siempre el primer elemento. Revísalo, por algún sitio tiene que haber algún error.

    Para verificarlo, pon un punto de ruptura debajo de tu "var p = ...", y examina con el debugger la lista que te ha cargado en p. Verás como es una lista con los diferentes emails. El problema debe estar más adelante, en el sitio donde los visualizas en pantalla.

    martes, 30 de octubre de 2012 20:50
  • Alberto, muchas gracias por tu tiempo, efectivamente fue lo primero que revise sin embargo no era ese el problema, pero ya lo resolví, gracias a una liga que encontré en este mismo foro que me sirvió de base para mi código esta es liga liga de tutorial el código que generé me quedo así, por si a alguien puede ayudarle

    var consultaNombres = (from personas in db.tablaPersonal
                                            join correos in db.tablaPersonalEmail on personas.id equals correos.idPer into personasCorreo
                                            from pCorr in personasCorreo.DefaultIfEmpty()
                                            select new
                                            {
                                                nombres = personas.nombres,
                                                paterno = personas.paterno,
                                                materno = personas.materno,                                             
                                                rpe = personas.rpe,
                                                id = personas.id,
                                                correo = pCorr.email
                                            }).Where(v => v.nombres.Contains(cad) || v.paterno.Contains(cad) || v.materno.Contains(cad)).ToList();

    muchisimas gracias por tu tiempo y el de quienes lo leyeron.

    Carlos

    • Marcado como respuesta MartinezCarlos martes, 30 de octubre de 2012 21:22
    martes, 30 de octubre de 2012 21:22