我正在使用帶有單個SqlDbType.Structured參數的ADO.NET SqlCommand將表值參數發送給存儲過程。該sproc返回許多行,我需要進入一個強類型列表。將結果集(DataTable或DataReader位的DataTable)轉換爲List的最佳方法是什麼?將SqlCommand輸出轉換爲列表<MyType>?
謝謝。
我正在使用帶有單個SqlDbType.Structured參數的ADO.NET SqlCommand將表值參數發送給存儲過程。該sproc返回許多行,我需要進入一個強類型列表。將結果集(DataTable或DataReader位的DataTable)轉換爲List的最佳方法是什麼?將SqlCommand輸出轉換爲列表<MyType>?
謝謝。
您可以使用LINQ使用DataReader:
var list = reader.Cast<IDataRecord>()
.Select(dr => new YourType { Name = dr.GetString(0), ... })
.ToList();
但是爲什麼在他已經使用ado的時候使用ling? – 2011-05-17 17:01:32
@Laurence:呃,爲什麼不呢?如果你真的想要使用循環,你可以。 LINQ不是LINQ to SQL。 – SLaks 2011-05-17 17:20:06
最有效的方法是使用的DataReader:
var items = new LinkedList<MyClass>();
using(var connection = GetConnection()) {
using(var cmd = connection.CreateCommand()){
cmd.CommandText = "... your SQL statement ...";
// ... add parameters
cnn.Open();
using(var reader = cmd.ExecuteReader()) {
// accessing values via number index is most efficient
//gets index of column with name "PrimaryKey"
var ndxPrimaryKey = reader.GetOrdinal("PrimaryKey");
var ndxColumn1 = reader.GetOrdinal("Column1");
var ndxColumn2 = reader.GetOrdinal("Column2");
while(reader.Read()) {
var item = new MyClass();
// returns value of column "PrimaryKey" typed to nullable Guid
item.PrimaryKey = reader.GetValue(ndxPrimaryKey) as Guid?;
item.Column1 = reader.GetValue(ndxColumn1) as string;
item.Column2 = reader.GetValue(ndxColumn2) as int?;
items.AddLast(item);
}
}
cnn.Close();
}
}
return items;
我認爲你可以使用Dapper
的查詢轉換爲一類。
更多信息,請參閱我的答案在this link
數據集可能是你最好的朋友在這裏,但話又說回來數據集是有點討厭.... – 2011-05-17 17:00:16
事實證明,這是很多喜歡http://stackoverflow.com/問題/ 1464883/how-can-i-easily-convert-datareader-to-listt - 謝謝大家! – Snowy 2011-05-17 18:21:10