将List <datarow>转换为字符串</datarow>

时间:2013-07-30 18:43:36

标签: c# string list dataadapter

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

cmd3.Fill(badnum);

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

4 个答案:

答案 0 :(得分:3)

您的问题在于您使用DataRow的方式 DataRow包含多个值。

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

E.g。 dataRow["MyColumnName"]或索引dataRow[0]

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

这样的事应该对你有用:

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

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