比较两个DataTable中的DataTable单元格

时间:2012-08-29 04:31:45

标签: c# datagridview datatable compare cell

我一直致力于一个使用NLP来定义DataTable值的项目。我已经掌握了这个功能。但是,在使用DataTables时遇到了一些问题。

我将有两种不同的DataTable,两种格式都不同

e.g:

TABLE1

|第1栏|

TABLE2

|第1栏|第2栏|

在DataTable2中,第2列是第1列的对应值。 我打算比较两个DataTables的第1列的单元格内容,并通过我的NLP运行它。如果他们有一定的匹配百分比,我会将它们写入另一个DataTable。如果他们不匹配,我会把它留空。 例如:

如果> 75%匹配

表3

| DT1 Col 1 | DT2 Col 1 | DT2 Col 2 |

如果< 75%匹配

表3

| DT1 Col 1 | “”| “”

我的目标是以编程方式进行吗?我有伪代码,如果它有助于更​​好地解释它。

foreach(DataRow in Table1)
   foreach(DataRow in Table2)
      if(comparison score >=75.00)
            Write to table3
      else
            Write to table3 with blanks

我很感激这个问题的任何帮助。我仍然会做自己的研究,如果我有任何突破,我会回复。

编辑: 我刚刚意识到两个DataTable中的行可能不一定对应,所以我必须对所有单元格进行比较。这可能吗?

虽然不一定要使用DataTables,但我愿意接受建议。

1 个答案:

答案 0 :(得分:1)

因此,由于时间限制(和绝望),我已经找到了一个不优雅的解决方案。

我使用嵌套的 foreach - for 循环来遍历两个DataTables。代码如下:

            foreach (DataRow dRow in dt1.Rows)
            {
                a = dRow[0].ToString();
                for (int i = 0; i < dt2.Rows.Count; i++)
                {
                    b = dt2.Rows[i][0].ToString();
                    if (hcontroller.GetScore(a, b) >= 90.00)
                    {
                        c = dt2.Rows[i][1].ToString();
                        match = true;
                        break;
                    }
                    else
                    {
                        match = false;
                        continue;
                    }

                }
                if (match)
                {
                    dt.Rows.Add(a, b, c);
                }
                else
                {
                    dt.Rows.Add(a, "No close matches found!", "");
                }
            }

但是,我非常确定当DataTable达到一定的大小时,操作将耗费大量内存。此外, if 语句消除了找到更好匹配的可能性。

如果有的话我会接受其他建议。但我希望这有助于任何人遇到我面临的同样问题。干杯!