【问题标题】:Convert datarow(only single column) to a string list将数据行(仅单列)转换为字符串列表
【发布时间】:2012-05-22 18:39:27
【问题描述】:

请看看有什么问题?我想将数据行转换为字符串列表。

 public List<string> GetEmailList()
    {
        // get DataTable dt from somewhere.
        List<DataRow> drlist = dt.AsEnumerable().ToList();
        List<string> sEmail = new List<string>();
        foreach (object str in drlist)
        {
            sEmail.Add(str.ToString()); // exception
        }
        return sEmail; // Ultimately to get a string list.
    }

感谢您的帮助。

【问题讨论】:

  • 哪一列包含您的电子邮件数据?

标签: c# linq datatable datarow


【解决方案1】:

这里有几个问题,但最大的问题是您试图将 整行 转换为字符串,而实际上您应该尝试仅转换 单个单元格 变成一个字符串。您需要引用该DataRow 的第一列,您可以使用括号(如数组)来执行此操作。

试试这样的:

public List<string> GetEmailList()
{
    // get DataTable dt from somewhere.
    List<string> sEmail = new List<string>();
    foreach (DataRow row in dt.Rows)
    {
        sEmail.Add(row[0].ToString());
    }
    return sEmail; // Ultimately to get a string list.
}

【讨论】:

    【解决方案2】:

    这是我从 ReSharper 那里得到的关于如何做到这一点的一条线,不确定性能影响,只是想分享一下。

    List<string> companyProxies = Enumerable.Select(
                vendors.Tables[0].AsEnumerable(), vendor => vendor["CompanyName"].ToString()).ToList();
    

    【讨论】:

    • vendors的类型是什么?
    • vendors 是一个 ADO.NET 数据集
    【解决方案3】:

    以下是去除所有额外语法噪音后的效果:单线。

    public List<string> GetEmailList()
    {
        return dt.AsEnumerable().Select(r => r[0].ToString()).ToList();
    }
    

    【讨论】:

      【解决方案4】:

      Linq 方式 ...

          private static void Main(string[] args)
          {
              var dt = getdt();
      
              var output = dt
                  .Rows
                  .Cast<DataRow>()
                  .ToList();
      
              // or a CSV line
              var csv = dt
                  .Rows
                  .Cast<DataRow>()
                  .Aggregate(new StringBuilder(), (sb, dr) => sb.AppendFormat(",{0}", dr[0]))
                  .Remove(0, 1);
      
              Console.WriteLine(csv);
              Console.ReadLine();
          }
      
          private static DataTable getdt()
          {
              var dc = new DataColumn("column1");
              var dt = new DataTable("table1");
              dt.Columns.Add(dc);
              Enumerable.Range(0, 10)
                  .AsParallel()
                  .Select(i => string.Format("row {0}", i))
                  .ToList()
                  .ForEach(s =>
                  {
                      var dr = dt.NewRow();
                      dr[dc] = s;
                      dt.Rows.Add(dr);
                  });
              return dt;
          }
      

      【讨论】:

        猜你喜欢
        • 2018-01-08
        • 1970-01-01
        • 2013-10-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-05
        • 1970-01-01
        • 2014-08-06
        相关资源
        最近更新 更多