0

2つのデータテーブルがある場合:

DT1 & DT2

最初のものに2番目のものが含まれているかどうかを確認する方法、つまり、の同じ行がにあることを意味しDT2ますDT1

4

3 に答える 3

3

テーブルとcomapareフィールド(できればIDだけ)をループします。データテーブルの構造に応じて、これを行う方法はいくつかあります。

于 2012-06-18T14:04:26.413 に答える
2

私の質問:「すべての行のフィールドが他のDataTableの同じ行のフィールドと一致する必要がありますか?」

あなたの答え:「IDだけではない」

最初に、両方DataTablesがnullであるか、または両方が同じ行数を持っているかどうかを確認できます。次に、LINQを使用して、次を使用して両方が同じIDを持っているかどうかを判断できますEnumerable.Except

var dt1IDs = DT1.AsEnumerable().Select(r => r.Field<int>("id"));
var dt2IDs = DT2.AsEnumerable().Select(r => r.Field<int>("id"));
var diff = dt1IDs.Except(dt2IDs);
var equal = DT1.Rows.Count == DT2.Rows.Count && !diff.Any();

説明:diff.Any()DT2にないIDがDT1に少なくとも1つある場合、trueを返します。

編集:IDが一意でなく、繰り返される可能性がある場合は、DT1のすべてのIDがDT2にもあり、DT2のすべてのIDがDT1にあるかどうかを確認する必要があります。

var DT1InDT2 = dt1IDs.Except(dt2IDs);
var DT2InDT1 = dt2IDs.Except(dt1IDs);
var equal = DT1.Rows.Count == DT2.Rows.Count && !DT1InDT2.Any() && !DT2InDT1.Any();

このクエリはとにかく効率的です。


Edit2:私はあなたのrequiremnetを少し誤解しているのを見たばかりです。最初のテーブルに2番目のテーブルが含まれているかどうかだけを知りたいのであり、その逆はありません。

var DT2IdNotInDT1 = dt2IDs.Except(dt1IDs);
var equal = !DT2IdNotInDT1.Any();
于 2012-06-18T14:15:21.210 に答える
0

Intersect演算子を使用できます

var cross = DT2.AsEnumerable()。Intersect(DT1.AsEnumerable()、DataRowComparer.Default);

于 2012-06-18T14:11:08.313 に答える