我正在使用EF 4.1和我没有设计的数据库。我有两张桌子
TableA
[
TableAKey,
OtherField
]
TableB
[
TableBKey,
TableAKey, <-- Foreign Key
OtherField
]
我遇到的问题是删除父记录时外键不会被取消。这是我无法控制的,无法改变的。从TableB中选择时,我想排除缺少TableA记录的所有行。
在SQL中,使用简单的INNER JOIN很容易。但是下面的linq没有加入表格。我猜它正在优化SQL。下面的代码生成没有提到TableA的SQL。也许是因为我没有从中归还任何东西。
(from b in TableB
join a in TableA on b.TableAKey equals a.TableAKey
where b.OtherField == something
select b).ToList();
有没有办法强制SQL连接或更好的方法。
干杯
答案 0 :(得分:1)
和此:
var qa = from a in TableA
select a.id;
var q= from b in TableB
where qa.Contains(b.TableAKey)
它应该导致:
Select * from MyTable where idA in (Select id from tableA)
答案 1 :(得分:0)
生成的sql很大程度上取决于您的数据库提供程序... 尝试
(from a in TableA
from b in TableB
where b.OtherField == something && a.TableAKey == b.TableAKey select b).ToList();