【发布时间】:2016-03-03 09:24:54
【问题描述】:
我有这个代码..
var documents = from d in db.Documents select d;
documents = documents.OrderBy(d => d.Created);
documents = documents.Skip(20).Take(10);
在 db 中,我有 25 个文档(ID 从 1 到 25)。当我运行此代码时,我会从 id 19 到 24 获取文档。
如果我这样写
documents = documents.Skip(20);
或者像这样
documents = documents.Skip(20).ToList().Take(10).AsQueryable();
我从 id 20 到 25 获取文档..
我在这里缺少什么??
【问题讨论】:
-
当您谈论“文档 19 到 24”时,您使用的是基于 0 的索引,还是基于 1 的索引?你能显示minimal reproducible example吗? (顺便说一句,您的代码很难理解。我会使用
var actualPage = page ?? 1; var actualPageSize = pageSize ?? 10; var skip = (actualPage - 1) * actualPageSize; documents = documents.Skip(skip).Take(actualPageSize);... 之类的东西,并且可能会验证您没有得到负输入。我也会使用返回值而不是接受 @ 987654326@ 参考... -
此时,它看起来像是一个损坏的提供程序 - 或者数据不是您认为的那样。你看过生成的 SQL 吗? (请注意,您不是按 ID 排序的,这可能可能解释它...)
-
skip的值是多少?在“如果我这样写”部分
-
忘记最后一行,你永远不会创建一个 .ToList() 然后再次开始查询相同的信息。第一行,文档 skip(20) 确实是你告诉我的,它跳过前 20 个并给你剩下的,在你的情况下是 20-25
-
是的,那为什么当我使用这个文档时。Skip(20).Take(10) 我得到不同的文档?
标签: c# linq entity-framework-6