none
Busqueda de datos RRS feed

  • Pregunta

  • Hola como va? Tengo una tabla "principal" de una bd que no es mia y esta compartida en modo solo lectura, solo estoy creando un reporte, en esa tabla tengo campoA, campoB, campoC, campoC2, campoC3, en donde todos los campos son id de otras tres tablas TablaA, TablaB y TablaC ejemplo:

    Id   campoA   campoB  campoC  campoC2  campoC3

    1       1               1          1           1             1

    2       1               1          2           1             3

    esto es solo un ejemplo. Ahora yo realizo una busqueda

    var result = from c in db.Principal
                               orderby c.campoA ascending
                               select c;
    
    

    Luego hago el foreach

    foreach (Principal principal in result)
    {
      // mi codigo
    } 
    
    
    
    
    

    Entonces para mostrar los nombres de esos Id tengo que realizar otra consulta dentro del foreach ejemplo

    foreach (Principal principal in result)
    {
      var buscarTablaA = from c in db.TablaA
                               where c.Id == principal.campoA
                               select c;
                    foreach(TablaA itemA in buscarTablaA)
                    {
                        miVarA = ItemA.DescripcionA;
                    }
    } 

    Mi consulta existe otra forma mas sencilla de obtener la descripciones de los Id de la tabla principal para cargar en el reporte

    Desde ya Gracias

     
    miércoles, 24 de febrero de 2021 12:21

Respuestas

  • Cunado una tabla se une con otra varias veces (es decir un registro de la primera tiene varios foreign keys apuntando a la segunda), lo que se hace es repetir los joins cambiando el "alias" que se usa para aplicar el join. En el caso de usar LINQ, dicho "alias" es la variable que se pone en el "from". Es decir, quedaría más o menos así:

    var result = from p in db.Principal
                 join a in db.TablaA on p.campoA equals a.Id
                 join c1 in db.TablaC on p.campoC equals c.Id
                 join c2 in db.TablaC on p.campoC2 equals c.Id
                 join c3 in db.TablaC on p.campoC3 equals c.Id
                 orderby p.campoA ascending
                 select new { a.DescripcionA, c1.LoQueSea, c2.LoQueSea, c3.LoQueSea };

    • Marcado como respuesta EnzoTuc40 jueves, 4 de marzo de 2021 20:52
    jueves, 4 de marzo de 2021 14:10

Todas las respuestas

  • Hola Enzo,

    Respondiendo a tu pregunta, la lógica que estás implementando a mi parecer esta buena, puede que exista alguna otra manera de hacerlo pero si te funciona y es práctico para ti, es mejor no hacer cambio alguno.

    Saludo,

    Eric Ruiz

    miércoles, 24 de febrero de 2021 15:04
    Moderador
  • Lo más razonable sería hacer un "join" de las dos tablas. Más o menos así, pero puedo haberme equivocado en alguno de los nombres de los campos:

    var result = from p in db.Principal
                 join a in db.TablaA on p.campoA equals a.Id
                 orderby p.campoA ascending
                 select a.DescripcionA;

    miércoles, 24 de febrero de 2021 18:19
  • Lo más razonable sería hacer un "join" de las dos tablas. Más o menos así, pero puedo haberme equivocado en alguno de los nombres de los campos:

    var result = from p in db.Principal
                 join a in db.TablaA on p.campoA equals a.Id
                 orderby p.campoA ascending
                 select a.DescripcionA;

    Hola Alberto gracias por responder. Entendí el concepto del join, te consulto lo siguiente dado los datos

    Id   campoA   campoB  campoC  campoC2  campoC3

    1       1               1          1           1             1

    2       1               1          2           1             3

    join a las tablas A B y C en la tablas A y B el equals no es problema porque lo planteo como me sugeriste, en el caso de la tabla C como haría el equals ya que de la tabla principal campoC, campoC2 y campoC3 son todos id de la tabla C. Saludos y desde ya gracias

    jueves, 4 de marzo de 2021 13:50
  • Cunado una tabla se une con otra varias veces (es decir un registro de la primera tiene varios foreign keys apuntando a la segunda), lo que se hace es repetir los joins cambiando el "alias" que se usa para aplicar el join. En el caso de usar LINQ, dicho "alias" es la variable que se pone en el "from". Es decir, quedaría más o menos así:

    var result = from p in db.Principal
                 join a in db.TablaA on p.campoA equals a.Id
                 join c1 in db.TablaC on p.campoC equals c.Id
                 join c2 in db.TablaC on p.campoC2 equals c.Id
                 join c3 in db.TablaC on p.campoC3 equals c.Id
                 orderby p.campoA ascending
                 select new { a.DescripcionA, c1.LoQueSea, c2.LoQueSea, c3.LoQueSea };

    • Marcado como respuesta EnzoTuc40 jueves, 4 de marzo de 2021 20:52
    jueves, 4 de marzo de 2021 14:10
  • Excelente es lo que estaba buscando muchas gracias
    jueves, 4 de marzo de 2021 20:52