Unión interna simple en linq

Tengo tres mesas A, B and C. C tiene muchas B's que tiene muchos Aes

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

preguntado el 12 de junio de 12 a las 10:06

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

¡Oh si por supuesto! Estaba obteniendo los resultados de la consulta (que debería haber leído select a al final) luego haciendo result.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. -

1 Respuestas

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 Cestá 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 or haz tu propia pregunta.