数据表中多个字段值用逗号分隔

Separate multiple field values with a comma in a datatable

在我的应用程序中,我有一个函数可以克隆原始数据table 并使用它来创建一个新数据并添加一个新列,如下所示:

    private static DataTable CloneTable(DataTable originalTable, DataTable newTable, DataTable targetTable,
        string addedColumn, string columnToExtract, bool multipleConditions = false, string secondColumnName = null, string secondColumnConditon= null)
    {

        newTable = originalTable.Clone();
        newTable.Columns.Add(addedColumn);

        foreach (DataRow row in originalTable.Rows)
        {

            DataRow[] rowsTarget;

            if (multipleConditions == false)
            {
                rowsTarget = targetTable.Select(string.Format("ItemId='{0}'", Convert.ToString(row["ItemId"])));
            } else
            {
               rowsTarget = targetTable.Select(string.Format("ItemId='{0}' AND {1} ='{2}'", Convert.ToString(row["ItemId"]), secondColumnName, secondColumnConditon));
            }


            if (rowsTarget != null && rowsTarget.Length > 0)
            {
                string data = rowsTarget[0][columnToExtract].ToString();
                var lst = row.ItemArray.ToList();
                lst.Add(data);

                newTable.Rows.Add(lst.ToArray());
            }

            else
            {
                string data = "";
                var lst = row.ItemArray.ToList();
                lst.Add(data);
                newTable.Rows.Add(lst.ToArray());
                ErrorLogging.ErrorList.Add(new ErrorLogging()
                {
                    ErrorType = "Warning",
                    Relation = "Database- to do with column: " + addedColumn ,
                    Message = "Data not found for document with the itemId: " + row["ItemId"]
                });
            }

        }          

        return newTable;

    }

这很好用,但是,用于数据 table 的数据来自 sql 查询,有时在一行中的一个字段中,单个字段中会有多个值.例如,对于列语言,可能有一个字段具有以下值:English French German。我想做的是更改它,以便这些值用逗号分隔,我曾尝试做的是:

            if (rowsTarget != null && rowsTarget.Length > 0)
            {
                string data = rowsTarget[0][columnToExtract].ToString();
                var lst = row.ItemArray.ToList();
                lst.Add(data);
                string test = string.Join(",", lst);

                foreach (DataColumn column in newTable.Columns)
                {
                    if (column.ColumnName == "Language")
                    {
                        Console.WriteLine("test");
                        
                        newTable.Rows.Add(test.ToArray());
                    } 
                }
                newTable.Rows.Add(lst.ToArray());
            }

但我意识到这不起作用,因为它也会影响所有其他列,所以我想知道如何更改它,以便这将仅影响指定列的字段,以便多个值由逗号?我是走在正确的轨道上还是走错了路?

编辑 -

所以基本上,在这一切结束时,最终数据 table 被导出到一个 csv 文件中,这是它目前的样子:

这就是我想要的样子:

我不确定这有多容易分辨,但在第一张图片中,您会看到对于列语言下的字段,当有多个单词时,它没有用逗号分隔是我希望它做的,如第二张图片所示

第二次编辑:

当我尝试以下操作时:

        foreach (DataRow newRow in itemsTable.Rows)
        {

            object cellData = newRow["Language"];

            string test = string.Join(",", cellData.ToString().ToArray());
            Console.WriteLine(test);


        }

它确实添加了一个逗号,但它是在每个字符之后而不是每个单词之后,所以我觉得我越来越接近了,但我仍然缺少一些东西

您可能会使事情复杂化……您似乎想混合所有这些表格的“组合”并将逗号 ALL 添加到一个方法中……。而且我认为将这些函数分成一个简单的“克隆”方法和一个单独的简单“addCommas”方法会更容易。

添加逗号的方法应该相当简单,可能如下所示,请注意,您可以将其减少到四行代码,但是为了清楚起见,我使用了一些额外的变量……

string originalText;
string finalText;
string[] splitArray;
foreach (DataRow row in YourDataTable.Rows) {
  originalText = row["Language"].ToString();
  splitArray = originalText.Trim().Split(' ');
  finalText = string.Join(", ", splitArray);
  row["Language"] = finalText;
}