2009-03-06 10 views
0

私は、DataReaderを介して多数の行を返すことができるSQLクエリを持っています。ちょうど今私は結果セットをList(of)に変換し、グリッドをListにバインドします。オブジェクトのコレクションにレイジーロード

これは、データセットのサイズのためにタイムアウトになることがあります。

私は現在UIがビジネス層のオブジェクトのリストに作用している3つのteir設定を持っています。

誰もがこのシーンでレイジーローディングを実装する最良の方法を提案できますか?またはこれをきちんと実装する他の方法がありますか?

私は現在、.NET 2.0

EDIT Visual Studio 2005を使用しています:ページングが、このインスタンスで使用されるどのように?

答えて

1

LINQ to SQLはあなたの状況に合っているようです。

そうでない場合は、何らかの理由で、あなたはSQLにLINQを使用しない場合(例えば、あなたは、.NET 2.0にされている)、DataReaderを読み取り、適切なオブジェクトに変換イテレータ書いて考えてみます。

IEnumerator<MyObject> ReadDataReader() { 
    while(reader.MoveNext()) 
    yield return FetchObject(reader); 
} 
+0

LINQは.Net 3.5だけでなく、私はcurrntly 2.0に接続されている – Dean

+0

イテレーター2.0でも動作します。 –

+0

DataReaderを反復処理するのはすごく面倒ですが、 "オブジェクト"の寿命が比較的長く、DataReaderがDB接続を常に開いたままにしているため、私はそれを気に入らないのです。 – CraigTP

0

すべてのデータを一度に戻す必要がありますか?ページングを検討することができます。

0

ページングが最適なソリューションです。 SQL Server 2005以降を使用している場合は、新しい機能が追加されました。 ROWNUMBER()は:

WITH MyThings AS 
(
    SELECT ThingID, DateEntered, 
    ROW_NUMBER() OVER (ORDER BY DateEntered) AS 'RowNumber' 
    FROM dbo.Things 
) 
SELECT * 
FROM ThingDetails 
WHERE RowNumber BETWEEN 50 AND 60; 

SQLを実証する上で非常に有用であるデビッド・ヘイデンによってexampleがあります。

このメソッドを使用すると、返されるレコードの数が減り、全体の読み込み時間が短縮されます。これは、レコードの順序でどこにいるのかを追跡するためにもう少し作業をしなければならないことを意味しますが、それはその価値があります。
標準のページング手法では、すべてがデータベースから戻ってくる必要があり、中間層またはクライアント層(コードビハインド)でフィルタリングされるため、この方法はレコードを管理しやすいサブセットに減らします。

関連する問題