私はページングを行う必要があるASP.NET 2.0のWebアプリケーションを手に入れました。私のデータアクセスの方法はDataSet
をデータベース呼び出しから取り出し、List<Foo>
(Fooは私がDBから引き出している私のタイプです)に変換し、GridView
をバインドします。これは私のアプリケーションでDataTableの文字列インデクサーを使用する必要がなく、クラスのプロパティとして表示ロジックを実装することでデータベースから表示ロジックを分離できるということです。これは、SQLの代わりに.NETで並べ替えを実行していることを意味します。ソート中の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
十分な要素では、この遅れの原因となる。テスト用データベースに接続している私の開発マシンでは、DBから5000レコードを引くときに画面上の1つのグリッドをバインドするのに約0.5秒かかります。
この問題を解決するには、すべての表示ロジックをSQLに移動してソートとページングが行えるようにするか、より良い方法がありますか?
また、LinqがSQLを解決しますか? .NETクラスに実装されているカスタムプロパティでソートしてから.Skip(pageIndex * pageSize).Take(pageSize)
を使用すると、それはthis questionに記載されているようにSQLに変換されますか?
LinqからSQLへの問題解決方法はありますか? –