c# - 比较数据表并返回不匹配的行

标签 c# asp.net .net datatable

我正在尝试比较两个数据表并捕获第三个数据表的差异。

DataTable one = new DataTable();
            one.Columns.Add("ID");
            one.Columns.Add("PCT");
            one.Rows.Add("1", "0.1");
            one.Rows.Add("2", "0.2");
            one.Rows.Add("3", "0.3");
            gvone.DataSource = one;
            gvone.DataBind();
            DataTable two = new DataTable();
            two.Columns.Add("ID");
            two.Columns.Add("PCT");
            two.Columns.Add("OldPCT");
            two.Rows.Add("1", "0.0", "0");
            two.Rows.Add("2", "0.1", "0");
            two.Rows.Add("3", "0.9", "0");
            two.Columns.Remove("OldPCT");
            gvtwo.DataSource = two;
            gvtwo.DataBind();
            DataTable dt3 = two.AsEnumerable().Except(one.AsEnumerable()).CopyToDataTable();
            var diffName = two.AsEnumerable().Select(r => r.Field<string>("PCT")).Except(one.AsEnumerable().Select(r => r.Field<string>("PCT")));
            if (diffName.Any())
            {
                DataTable Table3 = (from row in two.AsEnumerable()
                                    join name in diffName
                                    on row.Field<string>("PCT") equals name
                                    select row).CopyToDataTable();
            }

现在我在表 3 中的结果应该是数据表二中的所有行。因为值(value)观不匹配。但它只返回数据表二的第一行和最后一行。但是我需要获取表 2 的所有行。如何对行进行排序和比较。

最佳答案

遍历每个数据表的行,然后遍历该循环中的每一列以比较各个值。

示例在这里:

http://canlu.blogspot.com/2009/05/how-to-compare-two-datatables-in-adonet.html

关于c# - 比较数据表并返回不匹配的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30400810/

相关文章:

c# - 限制为程序集添加引用

asp.net - 如何在Linux上运行ASP.NET Core Web应用程序?

c# - 调用 .DLL 的 NUnit 测试调用 WCF Web 服务 (.NET C#)

c# - 如何在C#中表示不同时区的日期时间

c# - OpenXML 方案颜色转换 - 应用 <a :gamma> and <a:invgamma>

ASP.Net Web API 与 WCF - Web API 是否可用于为单例 WCF 服务提供基于 REST 的通信?

c# - asp.net C# 中的调用上下文

.net - DrawingVisual Mouse Up事件

.net - 在 C# 服务中设置 ASP.Net 缓存 PrivateBytesLimit

c# - DataAccess 项目中类的命名约定是什么?