2012-12-12 75 views
0

枚舉我有2個數據表sendTablerecvTable格式化查詢通過2個不同的數據表

他們都有相同的列名和列

「節點」「DSP名稱」,「BUS」的數字「 IDENT」, 「站」 「REF1」, 「REF2」 「REF3」 「REF4」 「REF5」 「REF6」 「REF7」 「REF8」

我需要比較這兩個表和分離出不匹配,只有在檢查第3-11欄和忽略第1欄d 2

我試着先刪除2列,然後循環逐行並返回匹配和不匹配,但這種方法的問題是,我不再有「節點」和「DSP名稱」與行,當我完成我的結果

所以我需要有一個查詢

幫助這裏是我的嘗試

var samerecordQuery = from r1 in sendTable.AsEnumerable() 
         where r1.Field<int>("BUS").Equals(from r2 in recvTable.AsEnumerable() where r2.Field<int>("BUS")) 

這顯然不這麼工作,我怎麼格式化查詢說

from r1 cols[3-11] equals r2 cols [3-11] 

,一旦我有這個,我可以使用除了拉出錯配

回答

1

希望這有助於

var matched = from s in sendTable.AsEnumerable() 
       join r in recvTable.AsEnumerable() on 
       new {BUS = s.Field<int>("BUS"), IDENT = s.Field<int>("IDENT"),...} equals 
       new {BUS = r.Field<int>("BUS"), IDENT = r.Field<int>("IDENT"),...} 
       select new {Send = s, Receive = r}; 

這兩個表中的記錄相匹配基於任何你需要的列和收益相匹配記錄分組。

+0

出於某種原因,它不喜歡的語句{BUS = r1.Field (「BUS」)... – boiler1974

+0

它給我的錯誤R1是不在範圍內在等於的右側 – boiler1974

+0

看到我編輯的查詢,我使用的是標識符r1和r2,它們應該是s和r。你也必須將其他列添加到join語句中;這就是爲什麼我在每個「新」宣言結束時都有「......」的原因。 –

-1

這裏是我的解決方案

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 }; 
+0

如果您使用** Arturo Martinez **的回答來解決此問題,請將其標記爲在信用到期時給予信用的答案。特定的代碼不如通用代碼重要,這看起來就像您爲您發佈的答案的具體實現。 – zimdanen