第0步,两个表都按照title排序
第1步,比较数量,不一致直接False了
第2步,如果数量一致,循环比较,第一行和第一行比,第二行和第二行比.......,只要一个对不上,就False了
第3步,都比完了,返回Ture
public Boolean Compare(table1,table2) { if(table1.count != table2.count) { return false; } for(i = 0; i < table1.count; i++) { if(table1.rows[i]["title"] != table2.rows[i]["title"]) { return false; } } return true; }
这方法可行,就是需要先排序,增加了算法复杂度,分给你了,我刚刚自己写了个,贴出来大家学习下
DataTable ws; string[] numbers ; //赋值 //.. if (numbers.Length != ws.Count) { return "Error:附件个数和节点要求的个数不同!"; } else { foreach (var item in ws) { if (!((IList)numbers).Contains(item)) { return "Error:附件名称和节点要求的名称不同!"; } } return "true"; }
@风醉飘: 这样写我也想到了,不过我想这样写的话,table1中没个title都要在table2中找一遍,就是那个
Contains方法,不知道其内部如何实现的,估计也是个循环,如果两个表数量大,就会慢,不如先排个序,一劳永逸了。而且排序不一定要在c#代码里排,从数据库查询的时候就排好。
@会长: 这样挺对的,具体问题具体分析 TKS
木有看懂,
既然是linq, 你用A except一次B 再用B except 一下A, 看看怎么样
没有说是 linq 其实就是两个数据集,要求A数据集中的某一列一定要和B数据集中的一列一一对应