简体   繁体   English

将SqlCommand输出转换为List <MyType> ?

[英]Convert SqlCommand Output to List<MyType>?

I am using an ADO.NET SqlCommand with a single SqlDbType.Structured parameter to send a table-valued parameter to a sproc. 我正在使用带有单个SqlDbType.Structured参数的ADO.NET SqlCommand将表值参数发送到sproc。 The sproc returns many rows, which I need to get into a strongly-Typed List of . sproc返回许多行,我需要进入强类型列表。 What is the best way to convert the result set (whether DataTable from a DataAdapter or DataReader bits) into List? 将结果集(DataTable是否从DataAdapter或DataReader位转换)到List中的最佳方法是什么?

Thanks. 谢谢。

You can use LINQ with a DataReader: 您可以将LINQ与DataReader一起使用:

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

The most efficient way is using datareader: 最有效的方法是使用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;

i think you can use Dapper to convert a query to a class. 我认为你可以使用Dapper将查询转换为类。

for more information see my answer in this link 有关更多信息,请参阅此链接中的答案

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM