c#根据条件删除较旧的重复数据表

时间:2018-10-16 08:24:13

标签: c#

我有一个重复行的DataTable。行是相等的,但日期是不同的,并且在某些列中没有插入日期。我需要删除较旧的副本,并删除没有插入日期的副本。我有以下代码,但由于无法将字段转换成mAuth = FirebaseAuth.getInstance(); if (mAuth.getCurrentUser() != null) { Intent intent = new Intent(this, MainActivity.class); startActivity(intent); finish(); } 进行比较而无法正常工作。

DateTime

1 个答案:

答案 0 :(得分:0)

因此,您要根据date列删除重复项吗?您可以使用LINQ:

List<DataRow> duplicateRows = dTable.AsEnumerable()
    .GroupBy(r => r[colName])
    .SelectMany(g => g
        .Select(r => new
        {
            Row = r,
            Date = DateTime.TryParse(r.Field<string>("date"), out DateTime date) 
                       ? date : new DateTime?()
        })
        .OrderByDescending(x => x.Date.HasValue)
        .ThenByDescending(x => x.Date.GetValueOrDefault())
        .Skip(1))  // only the first row of the group will be retained
    .Select(x => x.Row)
    .ToList();

duplicateRows.ForEach(dTable.Rows.Remove);

因此,首先所有包含日期​​值的行,该组按日期值本身的降序排列,因此最新的第一行,所有其他行都是重复的。