-2

以下をご覧ください。

        DataTable newTable = new DataTable();
        DataColumn colRMID = new DataColumn();
        colRMID.DataType = typeof(System.Int32);
        colRMID.ColumnName = "RMID";

        DataColumn colCpty = new DataColumn();
        colCpty.DataType = typeof(System.String);
        colCpty.ColumnName = "Cpty";

        newTable.Columns.Add(colRMID);
        newTable.Columns.Add(colCpty);

        DataRow r1 = newTable.NewRow();
        r1["RMID"] = 1234;
        r1["Cpty"] = "Internal";
        newTable.Rows.Add(r1);

        DataRow r2 = newTable.NewRow();
        r2["RMID"] = 5678;
        r2["Cpty"] = "Wales Fargo";
        newTable.Rows.Add(r2);


        DataRow r3 = newTable.NewRow();
        r3["RMID"] = 1234;
        r3["Cpty"] = "External";
        newTable.Rows.Add(r3);
        DataRow r4 = newTable.NewRow();
        r4["RMID"] = 9876;
        r4["Cpty"] = "Internal";
        newTable.Rows.Add(r4);

"Cpty" = "Internal" であるすべての重複行 (同じ "RMID" を持つ) を削除したいと思います。したがって、データテーブルの最終出力は次のようになります。

RMID  Cpty
5678 "Wales fargo"
1234 "External"
9876 "Internal"

LINQ を使用する必要がある

ありがとう、アビナフ

4

1 に答える 1

2

これは完全に効率的ではありませんが、冗長であり、概念を示しています。また、必要な結果が得られます。お客様のニーズに合わせてクリーニングできると確信しています。

        var excludes = newTable
            .AsEnumerable()
            .GroupBy(row => row.Field<int>("RMID"))
            .Select(groupedRows => new { Rows = groupedRows, Count = groupedRows.Count() })
            .Where(groupedRows => groupedRows.Count > 1)
            .Select(groupedRows => groupedRows.Rows.Single(row => row.Field<string>("Cpty") == "Internal"))
            .Select(row => new { Rmid = row.Field<int>("RMID"), Cpty = row.Field<string>("Cpty") });

        var filteredSet = newTable
            .AsEnumerable()
            .Select(row => new { Rmid = row.Field<int>("RMID"), Cpty = row.Field<string>("Cpty") })
            .Except(excludes);
于 2012-04-19T22:04:22.980 に答える