c# DataRow所有的项目数组为单个字符串,附加|到每个数组

本文关键字:数组 字符串 附加 单个 DataRow 项目数 项目 | 更新日期: 2023-09-27 18:01:34

 DataTable tblData = new DataTable();
                MySQLProcessor.dtTable(pullDataQuery, out tblData);
                foreach (DataRow columnRow in tblData.Rows)
                {
                  //do string work here
                }

columnRow看起来像这样
[0]苹果
[1]梨
[2]芒果

我想把它变成一个看起来像苹果|梨|芒果的字符串

很抱歉没有说清楚,每个表都有不同数量的数组项。

c# DataRow所有的项目数组为单个字符串,附加|到每个数组

试试

object[] arr = new object[] {"1", "2" };
string joinedStr = string.Join("|",arr.Select(p => p.ToString()).ToArray());
所以,你的代码可以变成
     DataTable tblData = new DataTable();
              string myStr = string.Empty; 
                    MySQLProcessor.dtTable(pullDataQuery, out tblData);
                    foreach (DataRow columnRow in tblData.Rows)
                    {
                      myStr = string.Join("|",columnRow.ItemArray.Select(p => p.ToString()).ToArray());
                      //do whatever you want
                    }

考虑String.Join。必须首先提取所讨论的列值,可能是…

var cols = row.ItemArray
    .Select(i => "" + i) // Not i.ToString() so when i is null -> ""
    .ToArray(); // For .NET35 and before, .NET4 Join takes IEnumerable
var res = string.Join("|", cols);

…或类似的。

快乐编码。

Mike你可以这样做

string finalString=string.Empty;
foreach (DataRow columnRow in tblData.Rows)
                {
           finalString+=columnRow["ColumnName"]+"|";
                }
if(finalyString.length>0)
{
finalyString=finalString.Substring(0,finalString.length-1) // this removes extra "|" at the end
}
//Without Using LINQ. In case you use old DotNet (Eg.2.0)
string ArrToStr(DataRow r,string separator)
{
   string temp = "";
   Object[] o = r.ItemArray;
   foreach(Object oo in o)
   {
     temp += oo.ToString() + separator;
   }            
   return temp;
}
//So you can use like this.
string value="";
foreach (DataRow row in combine.Rows)
{
   value += ArrToStr(row, ",") ;
}

[编辑]:

你可以通过它的属性ItemArray获得DataRow的所有值。ItemArray是一个数据类型为对象类型的值数组。

你可以将这个数组传递给函数string.Join(),该函数使用指定的分隔符将数组中的所有元素连接起来。

要小心,因为如果你的DataRow包含DBNull。函数string.Join()将隐式转换DBNull。值转换为空字符串(")。最后你可以得到这样的A||B。为了避免这种情况,我在示例中使用了LINQ函数Where()来摆脱DataRow的空值,并通过使用LINQ函数ToArray()将其再次转换为数组。关于DBNull.Value.ToString()的更多信息可以在msdn中找到。

在foreach循环中,你可以注意到我使用了美元符号- $(标识插值字符串的特殊字符),用于字符串插值。

"字符串插值是计算字符串字面值的过程包含一个或多个占位符,产生的结果中占位符被替换为相应的值"

在这种情况下,占位符被括在一对大括号{}中。通过使用字符串插值,我去掉了另一个用于连接字符串文字"'r'n"的+号运算符。

string str = "";
    
foreach (DataRow columnRow in tblData.Rows)
{
    str += $"{string.Join("|", columnRow.ItemArray.Where(val => val != DBNull.Value).ToArray())}'r'n";
}

试试这个:

string record = columnRow[0].ToString() + "|" + columnRow[1].ToString() + "|" + columnRow[2].ToString();