16

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
4

3 に答える 3

18

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();
于 2013-03-30T00:05:03.743 に答える
1

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 にアクセスしてください。

そしてその完了!!!! ハッピーコーディング…………

于 2013-12-20T10:14:26.560 に答える