首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在庞大的数据集上高效地实现Repository模式?(分页等)

如何在庞大的数据集上高效地实现Repository模式?(分页等)
EN

Stack Overflow用户
提问于 2016-03-22 05:50:37
回答 2查看 1.4K关注 0票数 0

我正在看微软给出的这个例子,我完全理解他们想要做的事情:http://www.asp.net/mvc/overview/older-versions/getting-started-with-ef-5-using-mvc-4/implementing-the-repository-and-unit-of-work-patterns-in-an-asp-net-mvc-application

我的问题是:在进行分页或处理大型数据集(数百万条或更多记录)时,如何有效地实现这一点?根据我对这段代码的理解,每次从存储库调用GetStudents时,它都会对整个数据集执行ToLists操作。如何使用存储库高效地实现搜索、排序和分页(我的定义是高效的,因为应用程序不需要查询所有行就可以执行筛选/分页/排序操作)?在我的特殊情况下,我谈论的是实体框架。我过去曾使用IQueryable进行高效查询,但我没有看到一种使用存储库模式生成高效商店查询的方法。请帮帮我!

EN

回答 2

Stack Overflow用户

发布于 2016-03-22 06:24:30

阅读你提到的那篇文章,你应该删除.ToList()。这将返回一个IQueryable,witch将“惰性调用”你的数据库。

正如中的示例所述:

代码语言:javascript
复制
var students = from s in context.Students
               select s;

要点是:当你有大的存储库时,永远不要查询整个东西。始终使用WHERE标准。可以在内存(应用程序)或DB中对结果进行分页。这真的取决于你的环境和需求。

票数 0
EN

Stack Overflow用户

发布于 2016-03-22 08:25:31

如果你看一下你链接到的页面的底部,你会看到过滤的例子:

代码语言:javascript
复制
public virtual IEnumerable<TEntity> Get(
        Expression<Func<TEntity, bool>> filter = null,
        Func<IQueryable<TEntity>, IOrderedQueryable<TEntity>> orderBy = null,
        string includeProperties = "")

Get函数在使用toList()实现查询之前应用过滤器。如果想要添加分页,可以添加一些参数,以便在实现之前将.Top()和.Skip()应用到查询中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36142295

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档