2009-04-11 20 views
0

私はデータ検索にアクティブレコードを使用する既存のアプリケーションを持っています。それはVB.NETにあります(初めてVB.NETをやっています;私は通常C#で働いています)。そして私はオブジェクトのList(Of T)を返すメソッドを構築しています。SQL DataAdapterから一般的なリストを埋め込むには、より良い方法がありますか?

現在のパターンでは、SQLDataAdapterを使用してデータテーブルを作成します。私はList(Of T)にレコードを追加する必要がありますが、これを行うにはより良い方法が必要です。

アイデア?それを避ける良い方法があります場合は、まだすべての応答がなかったてきたように私はそう、私は自分自身をアクティブレコードを使用していない... ...、

答えて

3

SQLDataAdapterを使用してと結婚していませんよどのような点で違いがあるのか​​分かりませんが、DataTable a List<T>に読んでいくと多少物が複製されています。

List<T>に代わりにSqlDataReaderを入力するのはどうですか? Read()を使用して結果を移動するときは、現在の行から新しいオブジェクトを作成し、それをリストに追加します。あなたは、様々な異なる種類のためにそれを行う必要がある場合、私はそれを行うための一般的な方法を記述します、の線に沿って:

public static List<T> ToList<T>(this SqlDataReader reader, 
    Func<SqlDataReader, T> rowConverter) 
{ 
    List<T> ret = new List<T>(); 
    while (reader.Read()) 
    { 
     ret.Add(rowConverter(reader)); 
    } 
    return ret; 
} 

その後、ラムダ式や匿名メソッドでコンバータを実装することができます。

の代わりに、拡張メソッドをコマンドの対象にすることもできます。ExecuteReaderを呼び出して、すべての行を変換してから、後でリーダーを破棄することができます。

SqlDataReaderはイテレータ現在の行の両方を表しているので、それは少し奇妙な署名です。APIの単なる気まぐれ。)

私はおそらくかかわらず、より深い何かが欠けている - これが解決しない場合なぜ、質問の編集として説明することができますか?

+0

いいえ、私が欲しかったのは...冗長データオブジェクトを回避する方法です。ありがとう! –

+0

あなたはToListがないと思うよ ScottE

+0

@ScottE:どこ?私たちは自分でリストを作成しています... –

関連する問題