Unión interna simple en linq
Frecuentes
Visto 473 veces
0
Tengo tres mesas A
, B
and C
. C
tiene muchas B
's que tiene muchos A
es
Quiero mostrar todos estos datos en un árbol, así que vinculo db.A
a mi control anidado que tenía una jerarquía de tres capas. El único problema es que obtengo demasiadas filas porque no está haciendo una unión interna entre B
and C
.
Entonces, ¿cómo puedo hacer algo como esto en linq:
SELECT A.name, B.name
FROM A
INNER JOIN B ON A.id = B.AID
INNER JOIN C ON B.id = C.BID
GROUP BY A.Name, B.Name
ORDER BY A.Name
He intentado lo siguiente sin éxito:
from a in A
join b in B on a.id equals b.AID
join c in C on b.id equals c.BID
select c
Muchas gracias
1 Respuestas
0
Pruebe lo siguiente:
from a in A
join b in B on a.id equals b.AID
join c in C on b.id equals c.BID
group new {a,b} by new {a.name,b.name} into g
select g
La combinación anterior es lo mismo que hiciste en la consulta sql, pero lo que quieres es:
from a in A
join b in B on a.id equals b.AID
join c in C on b.id equals c.BID
group c by c.name into g
select g
Respondido el 24 de enero de 13 a las 16:01
Casi, eso parece crear una lista de A
's que cada uno tiene una lista de {B, C}
está dentro. ¿Hay alguna forma de obtener el C
está dentro del correspondiente B
'¿s? Gracias - Jon
Realmente busco una estructura de árbol de la siguiente manera: Lista de A, cada elemento A contiene una lista de B y cada elemento B contiene una lista de C. Por ejemplo, result[0].B[0].C[0].name, accedería a un elemento en C. ¿Es eso posible? Gracias por la respuesta de todos modos. - Jon
No te preocupes MegaMind, he encontrado una solución. - Jon
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas linq join or haz tu propia pregunta.
Su consulta LINQ debería estar absolutamente bien en términos de unión. (Todavía no tiene ninguna agrupación, por supuesto). No está claro si se trata de LINQ to SQL o de otra cosa... lo que cambiará los pasos de diagnóstico. - Jon Skeet
¡Oh si por supuesto! Estaba obteniendo los resultados de la consulta (que debería haber leído
select a
al final) luego haciendoresult.B
y obtener demasiadas filas de nuevo. Necesito poner en la agrupación, entonces todo debería estar bien. Gracias por tu ayuda, lo aprecio mucho. - Jon