0

我有 2 个数据表sendTablerecvTable

它们都有相同的列名和列数

“节点”“DSP 名称”“总线”“IDENT”“站”“REF1”“REF2”“REF3”“REF4”“REF5”“REF6”“REF7”“REF8”

我需要比较这两个表并分离出不匹配的地方,只检查第 3-11 列并忽略第 1 列和第 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] 

一旦我有了这个,我就可以使用 except 来消除不匹配

4

2 回答 2

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

这将根据您需要的任何列匹配两个表中的记录,并返回分组的匹配记录。

于 2012-12-12T19:49:59.653 回答
-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 };
于 2012-12-18T14:18:10.877 回答