Principales respuestas
Busqueda de datos

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
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
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
-
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;
-
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
-
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
-