我有两个数据-- sendTable
和recvTable
它们都有相同的列名和列数。
“节点”"DSP名称“”总线“"IDENT”站"REF1“"REF2”"REF3“"REF4”"REF5“"REF6”"REF7“"REF8”
我需要比较这两个表,并分离出不匹配的部分,只检查第3-11列,忽略cols 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]
一旦我有了这个,我就可以用它来取出不匹配的东西。
发布于 2012-12-12 19:49:59
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-18 14:18:10
这是我的解决办法
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 };
https://stackoverflow.com/questions/13847186
复制相似问题