首页 > 解决方案 > 使用 C# 从数据表中删除重复项

问题描述

我在数据表中有这种格式的重复值

Sak    Dte
1      12/31/2020
2      12/31/2020
3      04/01/2020
3      12/31/2020

我需要从数据表中删除具有 04/01/2020 值的 Sak 3。以下是我正在使用的代码,但它正在删除具有 2020 年 12 月 31 日值的 Sak 3 任何解决此问题的想法。注意:如果您发现类似的 sak 值,您需要删除过去的日期 (dte) 值并保留未来的日期 (dte) 值。例如:sak 3 有 04/01/2020 和 12/31/2020 我们需要删除 04/01/2020 并保留 12/31/2020 预期 O/P Sak Dte 1 12/31/2020 2 12/31/2020 3 12/31/2020

private DataTable RemoveDuplicateRows(DataTable table)
{
    List<DataRow> rmList = new List<DataRow>();
    Dictionary<long, long> dictionary = new Dictionary<long, long>();

    foreach (DataRow row in table.Rows)
    {
        long sak = Convert.ToInt64(row["Sak"]);
        if (dictionary.ContainsKey(sak) == false)
        {
            dictionary.Add(sak, sak);
        }
        else
        {
            rmList.Add(row);
        }

    }
    foreach (DataRow row in rmList)
    {
        table.Rows.Remove(row);
    }

    //Datatable which contains unique records will be return as output.
    return table;
}

标签: c#

解决方案


尝试这个 :

table = table.AsEnumerable()
       .GroupBy(r => r["datetime"])
       .Select(g => g.OrderByDescending(c => c["datetime"]).FirstOrDefault())
       .CopyToDataTable();

我不知道您的日期时间列的名称。不确定它是否是 Dte,所以我只是在那里写了“日期时间”。


推荐阅读