Преобразовать вывод SqlCommand в список?
Я использую ADO.NET SqlCommand с одним типом SqlDbType.Структурированный параметр для отправки табличного параметра в sproc. Sproc возвращает много строк, которые мне нужно ввести в строго типизированный список . Что является лучшим способом, чтобы преобразовать результирующий набор (является ли объект DataTable из объекта DataReader или биты) в список?
Спасибо.
3 ответа:
Вы можете использовать LINQ с DataReader:
var list = reader.Cast<IDataRecord>() .Select(dr => new YourType { Name = dr.GetString(0), ... }) .ToList();
Наиболее эффективным способом является использование 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
для преобразования запроса в класс.Для получения дополнительной информации смотрите мой ответ в этой ссылке