我正在使用带有单个SqlDbType.Structured参数的ADO.NET SqlCommand将表值参数发送到sproc。 sproc返回许多行,我需要进入强类型列表。将结果集(DataTable是否从DataAdapter或DataReader位转换)到List中的最佳方法是什么?
感谢。
答案 0 :(得分:18)
您可以将LINQ与DataReader一起使用:
var list = reader.Cast<IDataRecord>()
.Select(dr => new YourType { Name = dr.GetString(0), ... })
.ToList();
答案 1 :(得分:3)
最有效的方法是使用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;
答案 2 :(得分:0)
我认为您可以使用Dapper
将查询转换为类。
有关详细信息,请参阅this link
中的答案