【发布时间】:2013-04-12 07:24:01
【问题描述】:
我现在有一些数据库,它包含一个大约 100 行的表。但将来它不会有 100 行而是 1 000 000+ 行,我必须小心我现在正在开发的 Web 应用程序。
下一个问题是:在网页上,我需要创建分页列表来向用户显示记录。这是我打算使用的代码示例
public IQueryable<MyTable> GetRows(int from, int to)
{
var queryRes = (from row in SomeDataContext.MyTable
order by row.id
select row).AsQueriable();
return queryRes.Take(to).Skip(from);
}
这只是代码示例。我没有运行它。 但问题是在这种情况下会发生什么?我看到了两个场景
- 它将从数据库和服务器端加载所有行,并返回从 'from' 到 'to' 范围内的记录。其他将被忽略。在这种情况下,我的应用程序会有很大的麻烦。想象一下每次从数据库中加载 1 000 000 行。这将是一场灾难。
- 它将构造 SQL 请求,只返回我需要的行而不加载其他行。这正是我需要的。
我认为这将是 2 种情况,但我不确定也无法检查。我说的对吗?
【问题讨论】:
-
@GertArnold 这有关系吗?它是一个可查询的 Linq。作为一个接口,它可以是 L2S L2EF 或 L2nH,它仍然可以正常工作。
-
我认为一个好的计划是将
SomeDataContext.Log设置为某个值(例如Console.Out),然后您就可以确切地看到正在使用的SQL。 -
我问是因为
SomeDataContext可以是任何东西。它建议 L2S,但谁知道呢?并且抽象是泄漏的。每个引擎都有自己的策略来实现分页。例如,L2E 要求您在 Skip 之前进行排序。 -
我使用实体框架,它类似于 MyEntities SomeDataContext = new MyEntities();
标签: c# linq iqueryable