实体框架4生成的查询正在加入完整的表

时间:2010-10-20 13:10:22

标签: linq entity-framework

我有两个实体:主人和细节。 当我查询它们时,对数据库的结果查询是:

SELECT [Extent2]."needed columns listed here", [Extent1]."needed columns listed here"
FROM (SELECT * [Details]."all columns listed here"...
     FROM [dbo].[Details] AS [Details]) AS [Extent1]
LEFT OUTER JOIN [dbo].[Master] AS [Extent2] ON [Extent1].[key] = [Extent2].[key]
WHERE [Extent1].[filterColumn] = @p__linq__0

我的问题是:为什么过滤器不在内部查询中?我怎样才能得到这个查询?我尝试了很多EF和Linq的表达方式。

我需要的是:

SELECT <anything needed>
  FROM Master LEFT JOIN Details ON Master.key = Details.Key
 WHERE filterColumn = @param

我在两个表中都进行了完整的顺序扫描,在我的生产环境中,每个表中都有数百万行。

非常感谢!!

1 个答案:

答案 0 :(得分:2)

有时实体框架不会产生最佳查询。您可以执行以下一些操作进行优化。

  1. 修改linq语句(使用 LINQPad
  2. Create a stored proc and map the stored proc to return an entity
  3. 创建一个处理连接的视图,并将视图映射到新视图 实体