2012-02-20 22 views
0

我们有一个存储过程,它返回一列字符串。我们希望使用SqlHelper.ExecuteReader(ConnectionString,...)来返回一个列表< string>但不确定语法。如何使用SQLReader返回列表<string>

我应该更加明确。我不想循环阅读并自己创建列表。我希望能有更简洁的'单线'或者一些我不知道的演员。

+0

这提供SQLHelper? http://social.msdn.microsoft.com/Forums/en-US/adodotnetdataproviders/thread/fd9229c0-53d0-4b3b-a7da-5df4047343a3 – 2012-02-20 19:06:58

+0

见例如:http://stackoverflow.com/questions/2586674/c-这是正确的方式使用的sqldatareader为daab – 2012-02-20 19:08:06

+0

好吧它没有在DNN世界过时。事实上,它在DNN第4版和第5版中被广泛使用。不要那么快地判断。 – Gio 2012-02-20 19:10:21

回答

2

您可以使用此扩展方法:

public static IEnumerable<IDataRecord> AsEnumerable(this IDataReader reader) 
{ 
    while (reader.Read()) 
    { 
     yield return reader; 
    } 
} 

... 

using (var reader = SqlHelper.ExecuteReader(connectionString, query)) 
{ 
    var list = reader.AsEnumerable().Select(r => r.GetString(0)).ToList(); 
} 
+0

谢谢我正在寻找这样的东西。我们有几种类型的查询,我希望能够比阅读器循环更简洁。 – Gio 2012-02-20 19:19:09

+0

@Gio,只是一个警告:不要尝试像'reader.AsEnumerable()。ToList()'这样的东西,它不会工作...列表中的所有项目都会引用最后一行。您在枚举时需要提取数据。 – 2012-02-20 19:24:11

0

您是否尝试过这样的事情?

var sl = new List<string>(); 

// Edit accordingly 
string sql = ""; 

// Edit accordingly 
string cs = "Data Source= ;Initial Catalog= ;Integrated Security= ;"; 

using (var conn = new SqlConnection(cs)) 
{ 
    conn.Open(); 
    using (var cmd = new SqlCommand(sql, conn)) 
    { 
     using (var dr = new command.ExecuteReader()) 
     { 
      var myRow = dr["MyColumn"]; 
      sl.Add(myRow.ToString()); 
     } 
    } 
}