将 SqlCommand 输出转换为列表<MyType>?

问题描述 投票:0回答:3

我使用带有单个 SqlDbType.Structured 参数的 ADO.NET SqlCommand 将表值参数发送到存储过程。存储过程返回许多行,我需要将其放入

<MyType>
的强类型列表中。将结果集(无论是来自 DataAdapter 的 DataTable 还是 DataReader 位)转换为
List<MyType>
的最佳方法是什么?

linq-to-sql list sqlcommand sqldbtype
3个回答
21
投票

您可以将 LINQ 与 DataReader 一起使用:

var list = reader.Cast<IDataRecord>()
                 .Select(dr => new YourType { Name = dr.GetString(0), ... })
                 .ToList();

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;

1
投票

我认为你可以使用

Dapper
将查询转换为类。

有关更多信息,请参阅我在此链接中的回答

© www.soinside.com 2019 - 2024. All rights reserved.