-5

2つのデータテーブルのフィールドが等しい限り、私が望むものを私に与える次のものがあります

var matched = from s in sendTable.AsEnumerable()
                     join r in recvTable.AsEnumerable() on
                     new { BUS = s.Field<int>("BUS"), 
                           IDENT = s.Field<int>("IDENT"), 
                           STATION = s.Field<int>("STATION"), 
                           REF1 = s.Field<string>("REF1"), 
                           REF2 = s.Field<string>("REF2"),
                           REF3 = s.Field<string>("REF3"),
                           REF4 = s.Field<string>("REF4"),
                           REF5 = s.Field<string>("REF5"),
                           REF6 = s.Field<string>("REF6"),
                           REF7 = s.Field<string>("REF7"),
                           REF8 = s.Field<string>("REF8") } equals
                      new { BUS = r.Field<int>("BUS"), 
                           IDENT = r.Field<int>("IDENT"), 
                           STATION = r.Field<int>("STATION"), 
                           REF1 = r.Field<string>("REF1"), 
                           REF2 = r.Field<string>("REF2"),
                           REF3 = r.Field<string>("REF3"),
                           REF4 = r.Field<string>("REF4"),
                           REF5 = r.Field<string>("REF5"),
                           REF6 = r.Field<string>("REF6"),
                           REF7 = r.Field<string>("REF7"),
                           REF8 = r.Field<string>("REF8") } 
                     select new { Send = s, Receive = r };

私が今欲しいのは、不平等です。ただし、これをどのように行うのですか?

4

1 に答える 1

1

Enumerable.Exceptこれらのフィールドで使用できます。

var sendIdentityFields = from s in sendTable.AsEnumerable()
                         select new
                         {
                             BUS = s.Field<int>("BUS"),
                             IDENT = s.Field<int>("IDENT"),
                             STATION = s.Field<int>("STATION"),
                             REF1 = s.Field<string>("REF1"),
                             REF2 = s.Field<string>("REF2"),
                             REF3 = s.Field<string>("REF3"),
                             REF4 = s.Field<string>("REF4"),
                             REF5 = s.Field<string>("REF5"),
                             REF6 = s.Field<string>("REF6"),
                             REF7 = s.Field<string>("REF7"),
                             REF8 = s.Field<string>("REF8")
                         };
var receivedIdentityFields = from r in sendTable.AsEnumerable()
                         select new
                         {
                             BUS = r.Field<int>("BUS"),
                             IDENT = r.Field<int>("IDENT"),
                             STATION = r.Field<int>("STATION"),
                             REF1 = r.Field<string>("REF1"),
                             REF2 = r.Field<string>("REF2"),
                             REF3 = r.Field<string>("REF3"),
                             REF4 = r.Field<string>("REF4"),
                             REF5 = r.Field<string>("REF5"),
                             REF6 = r.Field<string>("REF6"),
                             REF7 = r.Field<string>("REF7"),
                             REF8 = r.Field<string>("REF8")
                         };
var sendButNotReceived = sendIdentityFields.Except(receivedIdentityFields);

もちろん、これはこれらのフィールドを持つ匿名タイプのみを選択し、。は選択しませんDataRowsDataRowsを選択する必要がある場合はsendTable、同じフィールドでこの結果と結合する必要があります。

于 2012-12-18T14:30:03.303 に答える