2009-04-11 104 views
0

我有一個使用Active Record進行數據檢索的現有應用程序。它在VB.NET中(第一次我在做VB.NET;我通常在C#中工作)。我正在構建一個方法來返回一個對象的List(Of T)有沒有從SQL DataAdapter填充泛型List的更好方法?

當前模式使用SQLDataAdapter來填充數據表。當我填寫數據表時,我可以將該記錄添加到List(Of T),但這樣做有更好的方法。

任何想法?我還沒結婚用SQLDataAdapter,如果有避免它一個更好的辦法...

回答

3

正如你仍然沒有任何反應......

我還沒有使用活動記錄自己,所以我不知道在什麼點上有什麼不同,但是讓我覺得讀DataTable a List<T>有點複製。

如何從SqlDataReader填充List<T>而不是?當您使用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; 
} 

然後你就可以實現與lambda表達式或匿名方法的轉換器。

或者,您可以使擴展方法的目標命令而不是SqlDataReader - 它可以處理調用ExecuteReader,轉換每一行,然後處置閱讀器後。

(這是一個有點奇怪的簽名,因爲SqlDataReader既代表迭代器當前行;只是一個API的怪癖。)

我可能失去了一些東西更深,但 - 如果這沒有幫助,你能解釋爲什麼,也許是一個問題編輯?

+0

nope,這就是我想要的......一種避開冗餘數據對象的方式。謝謝! – 2009-04-11 20:48:27

相關問題