2010-02-23 8 views
2

Si j'ai Table3 qui a un FK pointant vers Table2 qui a un FK pointant vers Table1 ce que je vois via intellisense est que je peux référencer Table2 de Table3 mais je ne peux pas aller Table3 .Table2.Table1 il va seulement une couche profonde.Plusieurs couches de clés étrangères dans la requête LINQ

from t3 in Table3 
where t3.t2.property == "some value" && t3.t2.t1.property == "some other value" 
select t3.t2.t1; 

C'est esentially ce que je veux faire, mais je ne peux faire référence à t2, mais pas le t1 t2 qui a un lien.

Dois-je faire:

from t3 in Table3 
from t1 in Table1 
where t3.t2.property == "some value" && t1.property == "some other value" 
select t1; 

?

Répondre

3

Vous pouvez vous joindre à toutes les tables:

from t3 in Table3 
join t2 in Table2 on t3.Table2_FK equals t2.ID 
join t1 in Table1 on T2.Table1_FK equals t1.ID 
where t2.property == "some value" && t1.property == "some other value" 
select t1; 

(modifier) ​​

Je ne va pas seulement un niveau profond. En fait, votre premier exemple devrait fonctionner. Bien sûr, vos relations doivent être N à 1:

Table3 (n) --- (1) Table2 (n) --- (1) Table1 

donné t3 de Table3 vous pouvez faire:

t3.Table2.Table1 

Avez-vous la connexion entre Table2 et Table1 dans le fichier .dbml?

+0

Je pensais que la deuxième façon que j'ai montré fait la même chose parce que LINQ to SQL est déjà conscient de la relation FK. Est-ce incorrect? – jamone

+0

Autant que je sache, j'ai Table3 (n) --- (1) Table2 (n) --- (1) Table1 mis en place. Le fait que je puisse faire t3.t2 et t2.t1 ne devrait-il pas montrer indépendamment que les relations sont correctement établies? – jamone

+0

Ahh je ne sais pas pourquoi ça ne m'a pas mordu avant. Mon lien entre Table2 et Table1 a été inversé. C'était Table2 (1) --- (n) Table1. – jamone

Questions connexes