WPF比较两个数据表以查找匹配值

Posted

技术标签:

【中文标题】WPF比较两个数据表以查找匹配值【英文标题】:WPF Comparing two datatables to find matching values 【发布时间】:2015-06-06 19:30:29 【问题描述】:

在这里输入代码我有两个数据表,一个数据表连接到sql server,另一个连接到oracle。

我在两者上都运行查询语句,并且可以完美地找到这些语句。

现在我需要编写一些东西,将 oracle 中的“UNIT_NO”与 sql 中的“VehicleName”进行比较。是的,它们是相同的数字。

现在 Oracle 表引入 6 列,SQL 引入 4 列

一个例子是:

VehicleName、VehicleGroupName、UserDefinedColumn2、UserDefinedColumn3

Unit_No、Unit_ID、Using_Dept、Status、Using_Dept_Desc,

我希望我的代码从 Unit_NO 和 VehicleName 中找到匹配的编号,并将上述所有信息全部显示在一行中。我在想 linq,但我无法正确显示它

This code combines the columns from both tables but pulls but does not add the any data in the rows any suggest or fixes 
private void GetSQLOraclelinqData()
        

            var TstarData = GetTrackstarTruckData();
            var M5Data = GetM5Data();

            DataTable ComTable = new DataTable();

            foreach (DataColumn OraColumn in M5Data.Columns)
            
                ComTable.Columns.Add(OraColumn.ColumnName, OraColumn.DataType); 

            
            foreach (DataColumn SQLColumn in TstarData.Columns)
            
                if (SQLColumn.ColumnName == "VehicleName")
                    ComTable.Columns.Add(SQLColumn.ColumnName + 2, SQLColumn.DataType);
                else
                    ComTable.Columns.Add(SQLColumn.ColumnName, SQLColumn.DataType);

            

            var results = TstarData.AsEnumerable().Join(M5Data.AsEnumerable(),
                a => a.Field<String>("VehicleName"),
                b => b.Field<String>("Unit_NO"),
                    (a, b) =>
                    

                        DataRow row = ComTable.NewRow();
                        row.ItemArray = a.ItemArray.Concat(b.ItemArray).ToArray();
                        ComTable.Rows.Add(row);
                        return row;

                    );

            SQLDataTable.ItemsSource = ComTable.DefaultView;
            

【问题讨论】:

我正在使用 WPF 在 C# 中构建成本中心工具 服务器之间是否远程连接,可以同时查询? 是的,我正在同时拉动它们。 我做了两个公共数据表,一个是 getsqldata,另一个是 getoracledata,然后运行一个新的数据表,将信息放在一起 var SQLData = getsqlData(); var OraData = getOracleData(); 【参考方案1】:

我会使用两个嵌套的 for 循环来做到这一点。

外部 for 循环将遍历 SQL 数据表中的每一行。

内部循环将遍历 Oracle DataTable 中的每一行,如果有匹配项,它会将匹配项存储在某处(可能在列表中)。

可选提示

假设每个车牌只出现一次,我们可以通过在找到匹配项后立即跳出内部循环来优化此代码。 我们不能依赖以相同顺序返回的行。因此,我们不能天真地将 SQL 中的第 1 行与 Oracle 中的第 1 行进行比较。

【讨论】:

唯一的问题是我仍然必须展示那些没有匹配的人 没问题。如果您到达内部循环的末尾并且没有找到匹配项,则将该项目添加到不匹配列表中。最后,翻阅不匹配的列表并将它们全部打印出来。 哦好吧,有道理你能不能看看我上面的代码这是我到目前为止得到的,它带来了列而不是数据 看起来您正在遍历列。您必须改为遍历行。 我发现我的问题是我使用 + 2 而不是 +"2" 并且找不到匹配项。【参考方案2】:

我的代码基于抓取数据网格中尚未填充的列,我在后面的代码中调用两个数据表来填充表格以及我们的 Excel 工作表。如果有人需要这些信息,我可以提供帮助。

我连接到 SQL、Oracle 并加载 excel 表来比较数据

【讨论】:

以上是关于WPF比较两个数据表以查找匹配值的主要内容,如果未能解决你的问题,请参考以下文章

pyspark 数据框比较以根据关键字段查找列差异

Oracle:比较两个不同表中没有主键的字符串列以查找匹配/不匹配的字符串

numbers:两个表中查找相同的数据

SQL中的等号INLIKE三者的比较

SSIS - 比较文本文件和非oledb连接以提供匹配和不匹配的输出

WPF中让Combobox具有查找功能