2009-09-21 11 views
8

nel mio database ho ... TableA, TableB e TableCtavolo LINQ unirsi con Entity Framework

TableB ha solo 2 colonne, la chiave primaria della tabella A e TableC, così definisce veramente un uno a molti tra le due tabelle

Quello che voglio fare è utilizzare SQL:

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

In Entity Framework che non crea un TablesB per me di fare il join, penso perché TableB ha solo chiavi esterne!

Quindi, come posso farlo?

+0

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

risposta

7

Facendo un join con LINQ è abbastanza semplice

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

Credo che la vera questione può essere - perché non si dispone di una classe di entità per TablesB? Potremmo avere bisogno di più informazioni per rispondere a questo.

+0

I penso che sia perché TableB è composto da chiavi esterne, quindi non viene mostrato! –

3

Quando si importano le tabelle dal database, il framework delle entità si sbarazza della tabella TableB e mostra TableA e TableC per avere molte e molte relazioni. TableA ha una proprietà di navigazione TableCs e viceversa. Quindi tutto è necessario utilizzare queste proprietà di navigazione, per il campione:

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

Grazie Perplesso, sembra più carino. Solo una cosa. Con s.Id == 1, in realtà è l'ID di tableC che ho bisogno di impostare su 1, non su TableA. Come potrei farlo? Quindi è un'entità TableA che voglio restituire, ma voglio riempire TableC avendo TableC.ID = 1 .... ha senso? –

+0

Un elenco di righe della tabella A con righe dalla tabella C con Id = 1: var tablearows = db.TableC.Include ("TableAs"). Dove (c => c.Cid == 1) .Seleziona (c => c.TableAs) .ToList(); – Puzzled

Problemi correlati