格式化查询通过2个不同的数据表

问题描述:

枚举我有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] 

,一旦我有这个,我可以使用除了拉出错配

希望这有助于

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语句中;这就是为什么我在每个“新”宣言结束时都有“......”的原因。 –

这里是我的解决方案

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