2010-02-23 30 views
2

如果我的Table3有一个FK指向Table2,它有一个指向Table1的FK,我通过intellisense看到的是我可以参考表3中的表2,但是我不能去表3 .Table2.Table1只有一层深。LINQ查询中的多层外键

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

这是什么esentially我想做的事,但我只能引用T2,但并不表明T2已经链接到T1。

我应该这样做:

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

回答

3

你可以加入所有表:

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; 

(编辑)

我不会去只是一个层次深度。事实上,你的第一个例子应该工作。当然,你的关系必须是N到1:

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

给出的Table3你可以做t3

t3.Table2.Table1 

你有在.dbml文件Table2Table1之间的正确连接?

+0

我认为我展示的第二种方式做同样的事情,因为LINQ to SQL已经知道FK关系。那是不正确的? – jamone 2010-02-23 13:51:59

+0

据我所知,我确实有Table3(n)---(1)Table2(n)---(1)Table1的设置。我能做t3.t2和t2.t1的事实不应该独立表明这种关系是正确的? – jamone 2010-02-23 14:37:31

+0

啊,我不知道为什么它没有咬我之前。 Table2和Table1之间的链接被颠倒过来。它是表2(1)---(n)表1。 – jamone 2010-02-23 14:42:46