【发布时间】:2011-08-03 22:20:05
【问题描述】:
我在 ASP.NET 2.0 中有一个 Web 应用程序,我需要在其中进行分页。我的数据访问方法是从数据库调用中提取DataSet,然后将其转换为List<Foo>(其中 Foo 是我从数据库中提取的类型)并将我的GridView 绑定到它。我这样做的原因是我不想在整个应用程序中都在 DataTables 上使用字符串索引器,并且我可以通过将显示逻辑实现为我的类的属性来将显示逻辑与数据库分开。这也意味着我在 .NET 而不是 SQL 中进行排序。
那么,要实现分页,我需要将所有Foo 从数据库中拉出,对列表进行排序,然后从完整列表中取出我想要显示的内容:
List<Foo> myFoo = MyDB.GetFoos();
myFoo.Sort(new Foo.FooComparer());
List<Foo> toDisplay = new List<Foo>();
for (int i = pageIndex * pageSize; i < (pageIndex + 1) * pageSize && i < myFoo.Count; i++)
{
toDisplay.Add(myFoo[i]);
}
//bind grid
有了足够多的元素,这就会成为延迟的来源;在我连接测试数据库的开发机器上,从数据库中拉取5000条记录时,在屏幕上绑定一个网格大约需要0.5秒。
要解决这个问题,我是否必须将所有显示逻辑移到 SQL 中,以便在那里进行排序和分页,还是有更好的方法?
另外,Linq to SQL 能解决这个问题吗?如果我通过在我的 .NET 类中实现的自定义属性进行排序,然后使用.Skip(pageIndex * pageSize).Take(pageSize),它是否会按照this question 中的说明将其转换为 SQL?
【问题讨论】:
标签: c# asp.net-2.0 paging