如何使用Linq To Entities进行此查询
SELECT * FROM TableA
WHERE MyID IN
(
SELECT MyID
FROM TableB
)
问题是TableB不作为实体存在,因为它只包含其他表的外键,并且TableA和TableB之间没有直接链接
答案 0 :(得分:1)
如果没有TableB是一个实体,我不知道你能做什么。如果你确实使TableB成为一个实体,那么它就在你的模型中,你应该能够做如下的事情(不确定这是否完全正确,但概念应该是合理的):
var tableAResults = from ta in db.TableA
where
(
from tb in db.TableB
select db.MyID
).Contains(ta.MyID)
select ta;
如果您使用的是EF v1.0,则此类查询可能无效。 EF v1.0对它支持的linq查询有一些重大限制,它的SQL生成器很糟糕。我没有像使用v1.0那样使用EF v4.0(来自.NET 4.0测试版)的经验,但我相信上面的查询应该是可行的,它应该被翻译成与你非常相似的东西'原始SQL查询。
(如果您使用的是EF v1.0,请尽快迁移到EF v4.0,并在.NET 4.0 / VS2010发布后准备好了.EF v1.0有无数令人讨厌的限制,怪癖,愚蠢的规则,等等,只是让它成为一个使用的nitemare ......与某些相比,这个规则相当温和。)
答案 1 :(得分:0)
假设TableB没有出现,因为它是TableA和某些TableC之间多对多关系的一部分(你的问题对我来说唯一的方式),你会这样做:
var q = from a in Context.TableA
where a.TableC.Any() // replace "TableC" with the relationship property name
select a;
很简单,但你需要了解这些关系是如何运作的。