3 つの列 (名、姓、年齢) を持つデータテーブルがあります。それを参照して、同じ名と姓を持つ行を探し、それらを同じ最初と最後の名前を持つ 1 つの行に置き換えます。苗字。年齢の列については、すべての年齢を 1 つのセルに入れ、'|' で区切ります。また ';'。
前:
ジョン # ドウ # 24
ジョン # ドウ # 35
後:
ジョン # ドウ # 24|35
LINQ とDataRowExtensionsSystem.Data.DataSetExtensions.dll
などのアセンブリ内の拡張機能を使用して、行をグループ化し、次のように必要な値を結合できます。
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 行をグループ化する方法を尋ねる多くの質問があります。これを参照して、より複雑なグループ化を行うことができます