2 つの DataTables があり、最初の行から 2 番目の行に存在しない行を選択したい
例えば:
表 A ID列 1 データ1 2 データ2 3 データ3 4 データ4 表 B ID列 1 データ10 3 データ30
結果を次のようにしたい:
表 C ID列 2 データ2 4 データ4
2 つの DataTables があり、最初の行から 2 番目の行に存在しない行を選択したい
例えば:
表 A ID列 1 データ1 2 データ2 3 データ3 4 データ4 表 B ID列 1 データ10 3 データ30
結果を次のようにしたい:
表 C ID列 2 データ2 4 データ4
Linq を使用できます。特にEnumerable.Except
、TableB にはない TableA の ID を見つけるのに役立ちます。
var idsNotInB = TableA.AsEnumerable().Select(r => r.Field<int>("id"))
.Except(TableB.AsEnumerable().Select(r => r.Field<int>("id")));
DataTable TableC = (from row in TableA.AsEnumerable()
join id in idsNotInB
on row.Field<int>("id") equals id
select row).CopyToDataTable();
も使用できWhere
ますが、効率が低下します。
DataTable TableC = TableA.AsEnumerable()
.Where(ra => !TableB.AsEnumerable()
.Any(rb => rb.Field<int>("id") == ra.Field<int>("id")))
.CopyToDataTable();
Linq Enumerable.Except Method 関数を使用して、2 つの DataTable の違いを取得できます。ここでは、firstDt と secondDt を使用します。両方の Dt が同じ構造であることを思い出してください。
var EntriesNotInB = firstDt.AsEnumerable().Select(r => r.Field<string>("abc")).Except(secondDt.AsEnumerable().Select(r => r.Field<string>("abc")));
if (EntriesNotInB.Count() > 0)
{
DataTable dt = (from row in firstDt.AsEnumerable()join id in EntriesNotInB on row.Field<string>("abc") equals id select row).CopyToDataTable();
foreach (DataRow row in dt.Rows)
{
/////Place your code to manipulate on datatable Rows
}
}
Enumerable.Except メソッドの詳細については、http: //msdn.microsoft.com/en-us/library/system.linq.enumerable.except(v=vs.110).aspx にアクセスしてください。
そしてその完了!!!! ハッピーコーディング…………