0

3 つの列 (名、姓、年齢) を持つデータテーブルがあります。それを参照して、同じ名と姓を持つ行を探し、それらを同じ最初と最後の名前を持つ 1 つの行に置き換えます。苗字。年齢の列については、すべての年齢を 1 つのセルに入れ、'|' で区切ります。また ';'。

前:

ジョン # ドウ # 24

ジョン # ドウ # 35

後:

ジョン # ドウ # 24|35

4

1 に答える 1

2

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 行をグループ化する方法を尋ねる多くの質問があります。これを参照して、より複雑なグループ化を行うことができます

于 2013-07-15T08:55:40.047 に答える