Преобразовать вывод SqlCommand в список <MyType>? - PullRequest
2 голосов
/ 17 мая 2011

Я использую ADO.NET SqlCommand с одним параметром SqlDbType.Structured для отправки табличного параметра в sproc.Sproc возвращает много строк, которые мне нужно включить в сильно типизированный список.Каков наилучший способ преобразования набора результатов (будь то DataTable из битов DataAdapter или DataReader) в список?

Спасибо.

Ответы [ 3 ]

18 голосов
/ 17 мая 2011

Вы можете использовать LINQ с DataReader:

var list = reader.Cast<IDataRecord>()
                 .Select(dr => new YourType { Name = dr.GetString(0), ... })
                 .ToList();
3 голосов
/ 17 мая 2011

Самый эффективный способ - использовать 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;
0 голосов
/ 08 ноября 2013

Я думаю, вы можете использовать Dapper для преобразования запроса в класс.

для получения дополнительной информации см. Мой ответ в эта ссылка

...