通过id在数据表中查找重复行 - 将重复的列值作为连接字符串添加到新列,然后删除dulplicate列

Pau*_*aul 0 c# linq datatable

我有以下DataTable

RequestId  userID   ProductCode  ProductValue
1          "10004"  70           85.50        
2          "10004"  67           944.00
3          "10333"  30           97.00
4          "23344"  70           89.00
Run Code Online (Sandbox Code Playgroud)

我想实现如下-串接ProductCode,并ProductValue进入一个逗号分隔的字符串转换成一个新的列和任何重复的行会被添加到这个逗号分隔的字符串.然后删除重复行(按请求ID排序)

RequestId  userID   ProductCode  ProductValue NewColumn
1          "10004"  70           85.50        "70,85.50,67,944.00"
3          "10333"  30           97.00        "30,97.00"
4          "23344"  70           89.00        "70,89.00"
Run Code Online (Sandbox Code Playgroud)

这可能是使用Linq - 或者我必须循环遍历表并在我去的时候询问字段?

Kin*_*ing 5

var newTable = oldTable.Clone();
newTable.Columns.Add("NewColumn");
newTable = oldTable.AsEnumerable()
                   .GroupBy(row => row.Field<string>("userID"))
                   .Select(g => {
                      var newRow = newTable.NewRow();
                      var firstRow = g.First();
                      for(int i = 0; i < 4; i++) newRow[i] = firstRow[i];
                      newRow["NewColumn"] = string.Join(", ", 
                                            g.Select(row=>row.Field<string>("ProductCode")
                                                     + ", " + row.Field<decimal>("ProductValue")));
                      return newRow;
                    }).CopyToDataTable();
Run Code Online (Sandbox Code Playgroud)

注意:我认为ProductCode是字符串,并且双引号userIdNewColumn值不是实际值的一部分.