【问题标题】:Shortest way to merge DataTables and remove all duplicate rows合并数据表并删除所有重复行的最短方法
【发布时间】:2014-07-16 18:31:57
【问题描述】:

起初我想说我知道有很多合并和重复的例子,但我找不到我的问题的确切答案。目前我得到了我想要的结果(使用循环),但我只是想知道是否可以使用 LINQ 或其他(更短的)方式来完成。

以下是第一个表中的项目:

...和第二张桌子:

我想要实现的是比较这些表中两列中的值:A 列和 C 列,并从第二个表中获取行(第一个表中 B 列的附加值),这些行在第一个表中不重复。所以在这种特殊情况下......类似的事情:

【问题讨论】:

  • 您本可以发布带有循环的代码,可能我们中的任何一个人都可以缩短它!
  • 在你的表上是A列有主键吗?

标签: c# linq datatable merge duplicates


【解决方案1】:

只要第一个表“A 列”是唯一的,我认为如果您想要“B 列”中的值,这必须是唯一的。如果不是这样,这可能会失败,并且必须以不同的方式编写 linq 语句,并且必须知道在多对多关系中对“列 B”的要求。

var dt1 = new DataTable();
dt1.Columns.Add("Column A", typeof (string));
dt1.Columns.Add("Column B", typeof (string));
dt1.Columns.Add("Column C", typeof (int));
dt1.Rows.Add("XYZ", "s54a4", 1);
dt1.Rows.Add("QWE", "g743s", 2);
dt1.Rows.Add("ABC", "j74ss", 2);

var dt2 = new DataTable();
dt2.Columns.Add("Column A", typeof (string));
dt2.Columns.Add("Column C", typeof (int));
dt2.Columns.Add("Column Z", typeof (string));
dt2.Rows.Add("XYZ", 1, "something1");
dt2.Rows.Add("QWE", 2, "something2");
dt2.Rows.Add("ABC", 4, "something3");

var dt3 = new DataTable();
dt3.Columns.Add("Column A", typeof (string));
dt3.Columns.Add("Column C", typeof (int));
dt3.Columns.Add("Column Z", typeof (string));
dt3.Columns.Add("Column B", typeof (string));


// Assumes value in Column A in dt1 is unique
// Joins on Column A between the two tables then filters where column C isn't the same
var data = from dataRow1 in dt1.AsEnumerable()
           join dataRow2 in dt2.AsEnumerable() on dataRow1.Field<string>("Column A") equals
               dataRow2.Field<string>("Column A")
           where dataRow1.Field<int>("Column C") != dataRow2.Field<int>("Column C")
           select
               new[]
                   {dataRow2["Column A"], dataRow2["Column C"], dataRow2["Column Z"], dataRow1["Column B"]};

// add the results into dt3
foreach (var d in data)
{
    dt3.Rows.Add(d);
}

【讨论】:

    猜你喜欢
    • 2015-11-02
    • 2018-06-09
    • 2020-08-16
    • 1970-01-01
    • 2015-06-09
    • 1970-01-01
    • 2021-12-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多