Linq to sql 将SqlCommand输出转换为列表<;MyType>;?

Linq to sql 将SqlCommand输出转换为列表<;MyType>;?,linq-to-sql,list,sqlcommand,sqldbtype,Linq To Sql,List,Sqlcommand,Sqldbtype,我使用一个ADO.NET SqlCommand和一个SqlDbType.Structured参数向存储过程发送一个表值参数。存储过程返回许多行,我需要将这些行放入一个强类型的行列表中。将结果集(无论是来自DataAdapter的DataTable还是DataReader位)转换为List的最佳方式是什么 谢谢。您可以将LINQ与DataReader一起使用: var list = reader.Cast<IDataRecord>() .Select(

我使用一个ADO.NET SqlCommand和一个SqlDbType.Structured参数向存储过程发送一个表值参数。存储过程返回许多行,我需要将这些行放入一个强类型的行列表中。将结果集(无论是来自DataAdapter的DataTable还是DataReader位)转换为List的最佳方式是什么


谢谢。

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

var list = reader.Cast<IDataRecord>()
                 .Select(dr => new YourType { Name = dr.GetString(0), ... })
                 .ToList();
var list=reader.Cast()
.Select(dr=>newyourtype{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;
var items=newlinkedlist();
使用(var connection=GetConnection()){
使用(var cmd=connection.CreateCommand()){
cmd.CommandText=“…您的SQL语句…”;
//…添加参数
cnn.Open();
使用(var reader=cmd.ExecuteReader()){
//通过数字索引访问值是最有效的
//获取名为“PrimaryKey”的列的索引
var ndxPrimaryKey=reader.GetOrdinal(“PrimaryKey”);
var ndxColumn1=reader.GetOrdinal(“Column1”);
var ndxColumn2=reader.GetOrdinal(“Column2”);
while(reader.Read()){
var item=new MyClass();
//返回键入为可空Guid的列“PrimaryKey”的值
item.PrimaryKey=reader.GetValue(ndxPrimaryKey)作为Guid?;
item.Column1=reader.GetValue(ndxColumn1)作为字符串;
item.Column2=reader.GetValue(ndxColumn2)作为int?;
items.AddLast(item);
}
}
cnn.Close();
}
}
退货项目;

我认为可以使用
Dapper
将查询转换为类


有关更多信息,请参见我在

中的答案数据集可能是您最好的朋友,但数据集有点糟糕……事实证明,这很像-谢谢大家!劳伦斯:嗯,为什么不呢?如果你真的想使用循环,你可以。LINQ不是LINQ到SQL。