我正在将 Web Api 与 OData 一起使用。我在 EF 5.0 中定义了一个实体。
我正在向 Controller:: 发送非常简单的请求
$.ajax({url: "/odata/Details?$top=10",
type: "GET",
dataType: 'json',
success: function (data) {
viewModel.list(data.value);
}
现在在我的控制器上编码::
[Queryable]
public override IQueryable<Area> Get()
{
return db.Area.AsQueryable();
}
我使用 SQL Profiler 看到的查询::
SELECT TOP (@p__linq__1)
[Project1].[id] AS [id1],
[Project1].[name] AS [name1],
[Project1].[pucrhase] AS [pucrhase1],
[Project1].[sale] AS [sale1]
FROM Area
ORDER BY [Project1].[id] DESC, [Project1].[name] ASC, [Project1].[pucrhase] ASC,
[Project1].[sale] ASC,N',@p__linq__1 int,@p__linq__1=10
我没有要求任何订购,按条款订购。EF 自己将 ORDER BY 子句添加到 Query 中。添加的 Order By 子句包含表的所有列。该表有 300 万条记录,查询超时,因为它是按所有列排序。
我通过删除 Order By 进行了测试,它花了不到一秒钟的时间完成
所以问题是
如何阻止实体框架(支持 Web Api Odata)将 Order By 子句发送到 Sql Query。
如何从服务器上运行的 SQL 查询实体框架(Web Api Odata)中删除 Order By 子句?
任何帮助表示赞赏。