我有一個使用Active Record進行數據檢索的現有應用程序。它在VB.NET中(第一次我在做VB.NET;我通常在C#中工作)。我正在構建一個方法來返回一個對象的List(Of T)
。有沒有從SQL DataAdapter填充泛型List的更好方法?
當前模式使用SQLDataAdapter
來填充數據表。當我填寫數據表時,我可以將該記錄添加到List(Of T)
,但這樣做有更好的方法。
任何想法?我還沒結婚用SQLDataAdapter
,如果有避免它一個更好的辦法...
我有一個使用Active Record進行數據檢索的現有應用程序。它在VB.NET中(第一次我在做VB.NET;我通常在C#中工作)。我正在構建一個方法來返回一個對象的List(Of T)
。有沒有從SQL DataAdapter填充泛型List的更好方法?
當前模式使用SQLDataAdapter
來填充數據表。當我填寫數據表時,我可以將該記錄添加到List(Of T)
,但這樣做有更好的方法。
任何想法?我還沒結婚用SQLDataAdapter
,如果有避免它一個更好的辦法...
正如你仍然沒有任何反應......
我還沒有使用活動記錄自己,所以我不知道在什麼點上有什麼不同,但是讓我覺得讀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的怪癖。)
我可能失去了一些東西更深,但 - 如果這沒有幫助,你能解釋爲什麼,也許是一個問題編輯?
nope,這就是我想要的......一種避開冗餘數據對象的方式。謝謝! – 2009-04-11 20:48:27