2011-04-13 50 views
3

问题:我试图从数据库中获取大量的条目,并将其绑定到使网站性能非常低的gridview。 我用过的东西:我已经索引了搜索时主要涉及的参数。此外,我正在stroing数据库返回会话中的查询,并在分页时使用它,而不是再次击中数据库。性能问题,同时绑定gridview与巨大的数据

我想要什么?有什么办法可以从数据库中检索网格页面大小的条目。我的网页大小为10.因此,10个条目将大大提高网站的性能。由于数据网格中有许多字段并且需要时间来获取它们。那么有没有这样的解决方案?对于查询

代码:

R1.DBLinqRDataContext objDB = new R1.DBLinqRDataContext(); 
return (from p in (from a in objDB.table1 
     orderby a.date descending 
     join i in objDB.table2 
     on a.ID equals i.ID 
        where ((SqlMethods.Like(a.Location, "%" + loc + "%")) && (Category != String.Empty ? (Category == "1" ? a.Func < 50 : a.Func > 50) : (SqlMethods.Like(a.loc, "%" + loc + "%")))) 
     select a) join r3 in objDB.table3 on p.ID equals r3.CompanyID select p).Distinct().ToList(); 

任何帮助?

如有更多详情请咨询....谢谢

+2

请查看[SQL Paging](http://www.15seconds.com/issue/070628.htm)上的这篇文章。我已经做了类似的存储过程中,但你应该能够定制它linq – Prescott 2011-04-13 07:43:53

+0

谢谢普雷斯科特... 我已经编辑我的查询以这种方式 不同我添加以下代码后: .Skip((pageIndex )* PageSize).Take(PageSize).ToList() 但我的桌面列表也不见了,我只看到10个条目,无法浏览 – abhijit 2011-04-13 08:10:36

+0

啊是的 - [通过委托分页改善SQL Server的性能](http:///www.nerdymusings.com/LPMArticle.asp?ID=23)向你展示了如何为sql存储过程做到这一点,如果你只是适应你的linq代码,它会做你所需要的。这是一个更多的参与,但它会给你一个很好的框架,你需要做分页 – Prescott 2011-04-13 14:02:02

回答

1

阅读对方的回答的点,做一个[查询] .Skip(X)。取(Y)的作品很好,但请检查一下您何时跳过并接听您称为IQueriable版本的电话,而不是IEnumerable版本。

如果您调用IQueriable版本,则会将其合并到查询中。 IEnumerable将执行查询,然后在内存中运行分页,并且你失去了所有的性能收益。