如何强制Linq加入表

时间:2011-07-26 15:03:12

标签: c# linq entity-framework

我正在使用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连接或更好的方法。

干杯

2 个答案:

答案 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();