2009-09-21 8 views
8

Dans ma base de données ... je TableA, TableB et TableCtable LINQ se joindre à l'entité cadre

TableB a seulement deux colonnes, la clé primaire de TableA et TableC, il définit vraiment une relation un à plusieurs entre les deux tables

ce que je veux faire en utilisant SQL est:

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

Dans Entity Framework, il ne crée pas un TablesB pour moi de faire la jointure, je pense que TableB ne dispose que des clés étrangères!

Alors, comment puis-je le faire?

+0

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

Répondre

7

Faire une jointure avec LINQ est assez simple

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

Je pense que la vraie question est peut-être - pourquoi avez-vous pas une classe d'entité pour TablesB? Nous pourrions avoir besoin de plus d'informations pour répondre à cette question.

+0

I pense que c'est parce que TableB est composé de clés étrangères donc il n'est pas montré! –

3

Lorsque vous importez les tables à partir de la base de données, entity framework supprime la table TableB et affiche TableA et TableC pour avoir de nombreuses relations. La TableA a une propriété de navigation TableCs et vice versa. Donc, tout ce que vous devez utiliser ces propriétés de navigation, pour l'échantillon:

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

ou

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

Merci Puzzled, ça ressemble plus à ça. Juste une chose. Avec le s.Id == 1, c'est en fait l'identifiant de tableC que j'ai besoin de mettre à 1, pas TableA. Comment ferais-je cela? Donc, c'est une entité TableA que je veux retourner, mais je veux remplir TableC ayant TableC.ID = 1 .... logique? –

+0

Une liste de lignes de la table A qui ont des lignes de la table C avec Id = 1: var tablearows = db.TableC.Include ("TableAs"). Où (c => c.Cid == 1) .Select (c => c.TableAs) .ToList(); – Puzzled

Questions connexes