【发布时间】:2018-09-30 08:06:51
【问题描述】:
OrderBy 对于 LINQ to Objects 是稳定的,但 Queryable.OrderBy 上的 MSDN 没有提及它是否稳定。
我想这取决于提供者的实现。 SQL Server 不稳定吗?因为它看起来如此。我快速浏览了Queryable source code,但从那里看并不明显。
我需要在其他操作之前订购一个集合,并且为了性能,我想使用IQueryable,而不是IEnumerable。
// All the timestamps are the same and I am getting inconsistent
// results by running it multiple times, first few pages return the same results
var result = data.OrderBy(i => i.TimeStamp).Skip(start).Take(length);
但如果我使用
var result = data.ToList().OrderBy(i => i.TimeStamp).Skip(start).Take(length);
它工作得很好,但是我失去了从 LINQ 到 SQL 的性能提升。 Queryable OrderBy/Skip/Take 的组合似乎会产生不一致的结果。
生成的 SQL 代码对我来说似乎很好:
SELECT
...
FROM [dbo].[Table] AS [Extent1]
ORDER BY [Extent1].[TimeStamp] ASC
OFFSET 0 ROWS FETCH NEXT 10 ROWS ONLY
【问题讨论】:
-
OrderBy 被转换为 SQL order by,因此它取决于数据库提供程序。
-
@arekzyla 数据库提供程序是 MS SQL。
-
您是否检查了执行了哪些 SQL 查询?见stackoverflow.com/questions/18237312/…
-
@MarcinJuraszek 答案已更新
标签: c# entity-framework linq linq-to-sql iqueryable