实体框架,为什么要生成这个sql?

Joh*_*n S 1 sql linq linq-to-entities entity-framework

当我查看EF生成的SQL查询时,我看到了

SELECT [extent1].ID as ID,
[extent1].Name as Name 
From( 
Select myview.ID as ID,
myview.Name as Name
From myview) AS [extent1]
Where([Extent1].ID = @p_linq_0)
Run Code Online (Sandbox Code Playgroud)

为什么外部选择发生在内部选择?我有一个非常大的表,我可以轻松地从外部查询获得记录,但整个查询结合时间超时.

我的Linq查询

var result = from i in invitationEntity.Invitations
.Where(a=>a.id == inviationId)
select i;
Run Code Online (Sandbox Code Playgroud)

我正在使用SQL 2012和EF5&Linq.

有没有办法"强制"更简单的查询?

Aka*_*ava 5

因为您在最后再次使用LINQ方法调用"SELECT".

var result = from i in invitationEntity.Invitations
.Where(a=>a.id == inviationId)
select i;
Run Code Online (Sandbox Code Playgroud)

最后一行选择i,没用,但EF不知道它是否有任何有用的东西,你可以简单地避免它.

var result = invitationEntity.Invitations
.Where(a=>a.id == inviationId);
Run Code Online (Sandbox Code Playgroud)

您仍然可以枚举结果并获取所有内容.

好对不起,我忘了添加,你不必使用"from",你可以简单地使用.Where(表达式)

如果你想使用LINQ关键字,那么你可以这样使用它,

var result = from i in invitationEntity.Invitations
where i.id == invitationId
select i;
Run Code Online (Sandbox Code Playgroud)

您不能混用LINQ关键字和LINQ扩展方法.