【问题标题】:How to use SQLReader to return List<string>如何使用 SQLReader 返回 List<string>
【发布时间】:2023-03-24 15:27:01
【问题描述】:

我们有一个返回单列字符串的存储过程。我们想使用 SqlHelper.ExecuteReader( ConnectionString,...) 来返回一个列表,但不确定语法。

我应该更明确一点。我不想遍历阅读器并自己构建列表。我希望有一个更简洁的“一个班轮”,或者可能是某种我不知道的演员阵容。

【问题讨论】:

标签: c# asp.net sql


【解决方案1】:

你可以使用这个扩展方法:

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();
}

【讨论】:

  • 谢谢,我一直在寻找这样的东西。我们有几种类型的这些查询,我希望有比通过阅读器循环更简洁的东西。
  • @Gio,只是一个警告:不要尝试做类似reader.AsEnumerable().ToList() 的事情,它不会起作用......列表中的所有项目都将引用最后一行。您需要在枚举时提取数据。
【解决方案2】:

看看Retrieving Data Using a C# .NET DataReader。该示例为此类问题提供了解决方案。

【讨论】:

    【解决方案3】:

    你尝试过这样的事情吗?

    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());
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2016-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-20
      相关资源
      最近更新 更多