正在转换列表<;DataRow>;到字符串

本文关键字:DataRow 字符串 gt lt 转换 列表 | 更新日期: 2023-09-27 18:25:29

我需要将从列表中的DataTable中提取的几行数据转换为用逗号分隔的字符串。这是我现在拥有的。它根本不起作用(它在消息框中显示System.Data.DataRow,System.Data.DataRow),但是列表中的断点显示了正确的行数和正确的数据。

cmd3.Fill(badnum);
List<DataRow> list = badnum.AsEnumerable().ToList();
string badnumbers = string.Join(",", list);
MessageBox.Show(badnumbers);

正在转换列表<;DataRow>;到字符串

您的问题在于如何使用DataRow
DataRow包含多个值。

典型的用法是引用行中的特定列。

例如dataRow["MyColumnName"]或按索引dataRow[0]

string.Join()需要string[]IEnumerable<string>

试试这个:

List<DataRow> list = badnum.AsEnumerable().ToList();
string badnumbers = string.Join(",", list.Select(r=>r["MyColumn"].ToString()).ToArray());
MessageBox.Show(badnumbers);

您不需要转换为列表。您可以将每一行转换为csv,如下所示

    foreach (DataRow dr in badnum.Rows)
        string csv = String.Join(",", row.ItemArray);

像这样的事情应该对你有用:

static void Main( string[] args )
{
  const string connectString = "Server=localhost;Database=sandbox;Trusted_Connection=True;";
  DataTable dt = new DataTable() ;
  using ( SqlConnection conn = new SqlConnection(connectString) )
  using ( SqlCommand cmd = conn.CreateCommand() )
  using ( SqlDataAdapter sda = new SqlDataAdapter(cmd) )
  {
    cmd.CommandText = @"select * from sys.objects" ;
    cmd.CommandType = CommandType.Text; 
    conn.Open();
    int rows = sda.Fill(dt) ;
  }
  Func<string,string> qt = x => "'"" + x.Replace("'"","'"'"") + "'"" ;
  DataRow dr = dt.Rows[0] ;
  string csv = dt.Columns
                 .Cast<DataColumn>()
                 .Select( c => qt(c.ColumnName) + "=" + qt(dr[c].ToString()) )
                 .Aggregate( (acc,s) => acc + "," + s )
                 ;
  Console.WriteLine(csv) ;
  return ;
}

为行的外观定义自己的语义。