如何将一行中的所有列值连接起来,然后将DataTable中的所有行连接到单个字符串中?
本文关键字:连接 DataTable 然后 起来 字符串 单个 一行 | 更新日期: 2023-09-27 18:10:17
我正在尝试连接数据表的所有列,然后连接所有行。
我试过下面的代码:
var student = new DataTable();
student.Columns.Add("Name", typeof(string));
student.Columns.Add("Country", typeof(string));
for (int i = 0; i <= 3; i++)
{
DataRow dr = student.NewRow();
dr["Name"] = "Student" + i;
dr["Country"] = "India";
student.Rows.Add(dr);
}
List<DataRow> rows = (from DataRow row in student.Rows select row).ToList();
var paramValues = rows.Select(x => string.Format("({0},{1}),", x.ItemArray[0], x.ItemArray[1])).Aggregate((x, y) => x + y).TrimEnd(',');
Console.WriteLine(paramValues);
输出是(Student0,India),(Student1,India),(Student2,India),(Student3,India)
这段代码是固定的两列,我怎么能使它一般的任何数量的列?
可以是这样的
var paramValues = String.Join(",",
rows.Select(x => "(" + String.Join(",", x.ItemArray) + ")" ));
也许您可以考虑采用更传统的方法。有时我发现Linq可读性差,并不是每个场景都适合使用它。
在你的情况下(如果可能的话),我认为一个正常的循环能更好地表达你的意图。
StringBuilder sb = new StringBuilder();
foreach (DataRow row in student.Rows)
{
// Concatenate all
sb.Append("(" + string.Join(",", row.ItemArray) + ")");
sb.AppendLine(); // Add a new line (or a sb.Append(",") for a comma)
}
Console.WriteLine(sb.ToString());
注意
上面的代码对表内容做了很多假设。例如,空值可能在这里造成严重破坏。