【问题标题】:WPF Comparing two datatables to find matching valuesWPF比较两个数据表以查找匹配值
【发布时间】: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();

标签: sql wpf excel oracle datatables


【解决方案1】:

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

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

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

可选提示

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

【讨论】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-27
    • 1970-01-01
    • 1970-01-01
    • 2013-04-02
    • 1970-01-01
    • 2017-09-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多