1

たとえば、次のような2つのテーブルがあります

データテーブル1

COLA  |  COLB  |  COLC 
 1       123      321
 2       321      333
 3       222      232

データテーブル2

COLA  |  COLB  |  COLC 
 1       123      321
 2       321      333

表1から行3のみを選択したい。

COLA IDで2つのテーブルを結合できるようにしたいのですが、DATATABLE2に存在しない行のみをDATATABLE1から選択します。

LINQでこれを行うにはどうすればよいですか?

結果は、データテーブル、Ienumerable、またはデータテーブルに簡単に戻すことができるものにすることを強くお勧めします。それが不可能な場合は私が管理します。

4

2 に答える 2

7
var rows = from t1 in table1.AsEnumerable()
           join t2 in table2.AsEnumerable() 
               on t1.Field<int>("COLA") equals t2.Field<int>("COLA") into tg
           from tcheck in tg.DefaultIfEmpty()
           where tcheck == null
           select t1

これにより、最終的に左外部結合が実行され、そこからの行table2がnullであるということは、のレコードがtable1一致しないことを意味します。このメソッドは、のすべての行をAny列挙する可能性があるため、使用しないことをお勧めします(これは、より大きなセットの場合、これは悪いことです)。LINQ結合は、指定したセレクター関数に一致するペアを見つけるために、両方のテーブルを1回だけ列挙します。table2table1

于 2012-08-01T19:14:06.433 に答える
3

最も簡単な方法は次のとおりです。

var dt2Cola = new HashSet<int>(table2.AsEnumerable()
                                     .Select(x => x.Field<int>("COLA"));

var dt1Rows = table1.AsEnumerable()
                    .Where(x => !dt2Cola.Contains(x.Field<int>("COLA"));
于 2012-08-01T18:57:50.370 に答える