如何比较2个数据表我有2个数据表,我只想知道它们是否相同。“相同”是指它们的行数完全相同,每列中的数据完全相同或不同。我喜欢编写(查找)方法来接受两个表并返回一个布尔值。如何以这种方式比较2个数据表?两者具有相同的模式。您需要遍历每个表的行,然后遍历该循环中的每一列以比较各个值。这是一个代码示例:http://canlu.blogspot.com/2009/05/how-to-compare-two-datatables-in-adonet.htmlpublicstaticboolAreTablesTheSame(DataTabletbl1,DataTabletbl2){if(tbl1.Rows.Count!=tbl2.Rows.Count||tbl1.Columns.Count!=tbl2.Columns.Count)returnfalse;for(inti=0;i如果将DataTable作为函数返回,则可以:DataTabledataTable1;//加载数据DataTabledataTable2;//加载数据(相同模式)vardifferences=dataTable1.AsEnumerable().Except(如此评论:我使用它并编写了一个公共方法来调用代码并返回一个布尔值。OP的答案是:使用代码:publicbooltablesAreTheSame(DataTabletable1,DataTabletable2){DataTabledt;dt=getDifferentRecords(table1,table2);如果(dt.Rows.Count==0)返回真;否则返回假;}//在http://canlu.blogspot.com/2009/05/how-to-compare-two-datatables-in-adonet.html找到privateDataTablegetDifferentRecords(DataTableFirstDataTable,DataTableSecondDataTable){//创建空表DataTableResultDataTable=newDataTable("ResultDataTable");//使用Dataset来使用DataRelation对象using(DataSetds=newDataSet()){//添加表ds.Tables.AddRange(newDataTable[]{FirstDataTable.Copy(),SecondDataTable.Copy()});//获取DataRelation的列DataColumn[]firstColumns=newDataColumn[ds.Tables[0].Columns.Count];for(inti=0;i尝试使用linq到Dataset(frombintable1.AsEnumerable()selectnew{id=b.Field("id")}).Except(fromaintable2.AsEnumerable()selectnew{id=a.Field("id")})查看原文:使用LINQ比对DataSet我得到了如何比较2个数据表的解决方案http://microsoftdotnetsolutions.blogspot.in/2012/12/compare-two-datatables.html如果您在数据库中有表,您可以进行完全外部连接以获得差异示例:选择t1。Field1,t1.Field2,t2.Field1,t2.Field2fromTable1t1fullouterjoinTable2t2ont1.Field1=t2.Field1andt1.Field2=t2.Field2wheret1.Field1isnullort2.Field2为空以过滤掉所有相同的记录。根据记录来自哪个表,前两个或后两个字段中有数据。//////https://stackoverflow.com/a/45620698/2390270///比较源和目标数据表并返回相同、不同、添加和删除的行//////DataTable比较///DataTable与dtOld进行比较///DataTable会为您提供两者中的公共行///DataTable会为您提供差异///DataTable会为您提供从dtOld到dtNew添加的行///DataTable会为您提供从dtOld到dtNew删除的行();dtAdded.Clear();dtRemoved=dtOld.Clone();dtRemoved.Clear();dtSame=dtOld.Clone();dtSame.Clear();如果(dtNew.Rows.Count>0)dtDifferences.Merge(dtNew.AsEnumerable().Except(dtOld.AsEnumerable(),DataRowComparer.Default).CopyToDataTable());如果(dtOld.Rows.Count>0)dtDifferences.Merge(dtOld.AsEnumerable().Except(dtNew.AsEnumerable(),DataRowComparer.Default).CopyToDataTable());如果(dtOld.Rows.Count>0&&dtNew.Rows.Count>0)dtSame=dtOld。AsEnumerable().Intersect(dtNew.AsEnumerable(),DataRowComparer.Default).CopyToDataTable();foreach(DataRowrowindtDifferences.Rows){if(dtOld.AsEnumerable().Any(r=>Enumerable.SequenceEqual(r.ItemArray,row.ItemArray))&&!dtNew.AsEnumerable().Any(r=>Enumerable.SequenceEqual(r.ItemArray,row.ItemArray))){dtRemoved.Rows.Add(row.ItemArray);}elseif(dtNew.AsEnumerable().Any(r=>Enumerable.SequenceEqual(r.ItemArray,row.ItemArray))&&!dtOld.AsEnumerable().Any(r=>Enumerable.SequenceEqual(r.ItemArray,row.ItemArray))){dtAdded.Rows.Add(row.ItemArray);}}}catch(Exceptionex){Debug.WriteLine(ex.ToString());没有什么可以为你做的;唯一的方法是遍历所有行/列并将它们相互比较好吧,如果您使用的是DataTables,那么您可以比较两个“DataTable”,当DataTable比较加载的原始数据AKADataTable.GetChangesMethod(DataRowState)或者,我没有实现数组比较,所以你要么会有一些乐趣:)以上是C#学习教程:如何比较2个dataTables共享的所有内容。如果对大家有用,需要详细了解C#学习教程,希望大家多多关注---publicboolCompareTables(DataTablesa,DataTableb){if(a.Rows.Count!=b.Rows.Count){//不同的大小意味着不同的表returnfalse;}for(introwIndex=0;rowIndex本文整理自网络,不代表立场,如涉及侵权,请点击右边联系管理员删除。如需转载,请注明出处:
