我在ASP.NET 2.0中有一個Web應用程序,我需要在其中進行分頁。我的數據訪問方法是從數據庫調用中取出一個DataSet
,然後將其轉換爲List<Foo>
(其中Foo是我的類型,我正在從數據庫中取出)並將其綁定到GridView
。我之所以這樣做,是因爲我不想通過應用程序在DataTable上使用字符串索引器,並且可以通過在我的類上實現顯示邏輯作爲屬性來將顯示邏輯從數據庫中分離出來。這也意味着我在.NET中進行排序而不是SQL。排序時在ASP.NET 2.0中有效的自定義分頁
實現分頁,然後,我需要把所有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)
,它是否會將其轉換爲SQL,如this question中所述?
Linq to SQL是否解決了所提出的問題? –