2009-09-21 22 views
8

En mi base de datos tengo ... TableA, TableB y TableCmesa de LINQ unirse con Entity Framework

TableB tiene sólo 2 columnas, la clave primaria de la Tabla A y TableC, por lo que realmente define una relación uno a varios entre las dos tablas

lo que yo quiero hacer uso de SQL es:

SELECT * 
FROM TablesA a 
JOIN TablesB b ON a.AID = b.AID 
WHERE b.BID = 1 

En el marco de la entidad que no crea un TablesB para mí hacer la unión, porque creo TableB solamente tiene las claves externas!

Entonces, ¿cómo puedo hacerlo?

+0

http://stackoverflow.com/questions/21051612/entity-framework-join-3-tables –

Respuesta

7

Haciendo una combinación con LINQ es bastante sencillo

from a in TablesA 
join b in TablesB 
on a.AID equals b.AID 
into joined 
where b.BID == 1 
select joined 

creo que la pregunta real puede ser - ¿por qué no tiene una clase de entidad de TablesB? Es posible que necesitemos más información para responder eso.

+0

I ¡creo que es porque TableB está compuesto por claves externas, por lo que no se muestra! –

3

Al importar las tablas de la base de datos, entidad marco se deshace de la tabla TableB y muestra TableA y TableC para tener muchas relaciones. TableA tiene una propiedad de navegación TableCs y viceversa. Así que todo lo que necesita para utilizar estas propiedades de navegación, por ejemplo:

var tableARow= db.TableA.First(s => s.Id == 1); 
if (!tableARow.TableCs.IsLoaded) { tableARow.TableCs.Load(); } 

o

var tableARow= db.TableA.Include("TableCs").First(s => s.Id == 1); 
+0

Gracias desconcertado, que se parece más a eso. Sólo una cosa. Con el ID == 1, en realidad es la ID de la tabla C la que debo establecer en 1, no en la tabla A. ¿Como podría hacerlo? Entonces, quiero regresar una entidad TableA, pero quiero llenar TableC teniendo TableC.ID = 1 ... ¿Tiene sentido? –

+0

Una lista de filas de la tabla A que tienen filas de la tabla C con Id = 1: var tablearows = db.TableC.Include ("TableAs"). Dónde (c => c.Cid == 1) .Seleccione (c => c.TableAs) .ToList(); – Puzzled