我需要将我从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);
答案 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 ;
}
为行的外观定义自己的语义。