我有一个包含 3 列(名字、姓氏、年龄)的数据表,我想浏览它并查找具有相同名字和姓氏的行,并将它们替换为具有相同第一个和姓。至于年龄列,我想将所有年龄放在一个单元格中,并用“|”分隔它们 或者 ';'。
前:
约翰 # Doe # 24
约翰 # Doe # 35
后:
约翰 # Doe # 24|35
您可以使用 LINQ 和程序集中的扩展(System.Data.DataSetExtensions.dll
如DataRowExtensions)对行进行分组并加入您想要的值,如下所示:
var dt=new DataTable();
dt.Columns.Add("A", typeof (string));
dt.Columns.Add("B", typeof (string));
dt.Columns.Add("C", typeof (int));
dt.Rows.Add("John", "Doe", 23);
dt.Rows.Add("John", "Doe", 24);
dt.Rows.Add("John", "Doe", 25);
var result = from row in dt.AsEnumerable()
group row by new {A=row.Field<string>("A"), B=row.Field<string>("B")} into grp
select new
{
CustomerName = grp.Key,
Items = String.Join(",",grp.Select(r=>r.Field<int>("C")))
};
foreach (var t in result)
Console.WriteLine(t.CustomerName + " " + t.Items);
诀窍是要意识到您要问的是如何对数据进行分组,然后使用 Count() 或 Sum() 以外的方法聚合值列
您会在 SO 中找到许多问题,询问如何对 DataTable 行进行分组,例如。您可以将其用作参考以进行更复杂的分组