1

DataSet oDs = new DataSet(); DataTable odt = new DataTable();

        odt.Columns.Add(new DataColumn("FILE_ID", typeof(string)));
        odt.Columns.Add(new DataColumn("ID", typeof(string)));
        oDs.Tables.Add(odt);
        oDs.AcceptChanges();

        for (int i = 1; i < 3; i++)
        {
            DataRow oDr = oDs.Tables[0].NewRow();
            oDr["FILE_ID"] = "a" + i;
            oDr["ID"] = "b" + i;
            oDs.Tables[0].Rows.Add(oDr);
        }
        for (int i = 1; i < 3; i++)
        {
            DataRow oDr = oDs.Tables[0].NewRow();
            oDr["FILE_ID"] = "c" + i;
            oDr["ID"] = "d" + i;
            oDs.Tables[0].Rows.Add(oDr);
        }
        oDs.AcceptChanges();

        DataTable odt1 = new DataTable();

        odt1.Columns.Add(new DataColumn("FILE_ID", typeof(string)));
        odt1.Columns.Add(new DataColumn("ID", typeof(string)));
        oDs.Tables.Add(odt1);
        oDs.AcceptChanges();

        for (int i = 1; i < 3; i++)
        {
            DataRow oDr = oDs.Tables[1].NewRow();
            oDr["FILE_ID"] = "a" + i;
            oDr["ID"] = "b" + i;
            oDs.Tables[1].Rows.Add(oDr);
        }
        for (int i = 1; i < 3; i++)
        {
            DataRow oDr = oDs.Tables[1].NewRow();
            oDr["FILE_ID"] = "c" + i;
            oDr["ID"] = "d" + i;
            oDs.Tables[1].Rows.Add(oDr);
        }
        oDs.AcceptChanges();

行の値の組み合わせ(FILE_ID + ID)が一意であるかどうか、および両方のデータテーブルで同じであるかどうかを確認できるLINQクエリが必要です

4

1 に答える 1

0

これにより、一意ではない値が取得されます。

var notUnique = odt.AsEnumerable()
                            .GroupBy(x => (string) x["FILE_ID"] + x["ID"])
                            .Where(g => g.Count() > 1);

一方のテーブルにあるが、もう一方のテーブルにはない値を見つけるには、ここで見つけ ます

特定のケースは次のようになります。

  var differentRows =
            odt.AsEnumerable().Where(
                o =>
                odt1.AsEnumerable().All(
                    o1 => ((string) o["FILE_ID"] + o["ID"]) != ((string) o1["FILE_ID"] + o1["ID"])))
                .Union(odt1.AsEnumerable().Where(
                o1 => odt.AsEnumerable().All(o => ((string)o["FILE_ID"] + o["ID"]) != ((string)o1["FILE_ID"] + o1["ID"]))));

これは、重複したレコードが違いとして現れない「except」メソッドに似ていることに注意してください。しかし、あなたは上記の重複をチェックしているので、それ以上のチェックは必要ないと思います.

于 2013-02-28T17:04:12.717 に答える