1

当我查看 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)

为什么外部选择发生在内部选择上?我有一个非常大的表,我可以通过外部查询轻松获取记录,但整个查询合并超时。

我的 Linq 查询

var result = from i in invitationEntity.Invitations
.Where(a=>a.id == inviationId)
select i;

我正在使用 SQL 2012 & EF5 & Linq。

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

4

2 回答 2

5

因为您在最后与 LINQ 方法一起再次调用“SELECT”。

var result = from i in invitationEntity.Invitations
.Where(a=>a.id == inviationId)
select i;

最后一行 select i, 没用,但 EF 不知道它有没有用,你可以简单地避免它。

var result = invitationEntity.Invitations
.Where(a=>a.id == inviationId);

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

好的对不起,我忘了补充,你不必使用“来自”,你可以简单地使用.Where(表达式)

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

var result = from i in invitationEntity.Invitations
where i.id == invitationId
select i;

不能混合使用 LINQ 关键字和 LINQ 扩展方法。

于 2013-07-29T18:35:19.983 回答
0

我会这样说

   var result = from i in invitationEntity.Invitations
               .Where(a=>a.id == inviationId)
                select i;

这个

    a=>a.id == inviationId

a=>生成

  Select myview.ID as ID,
  myview.Name as Name
  From myview

a[extent1] 也是如此

您应该使用“标准” where 子句

           from i in invitationEntity.Invitations
                  where i.id == inviationId
            select i;
于 2013-07-29T18:39:50.927 回答