C#LINQ查找重复项并递增

时间:2018-10-10 16:07:57

标签: c# linq

我有下表

Date/Time                            Value
10/1/2018 2017-05-21 19:30:44.000    11
10/1/2018 2017-05-21 19:30:44.000    12
10/2/2018 2017-05-21 19:31:44.000    9
10/3/2018 2017-05-21 19:32:44.000    8
10/4/2018 2017-05-21 19:33:44.000    12

我的查询当前消除了日期/时间和值中的重复项

var res = result.Select(x => new { x.p4.SampleDt, x.p1.Value }).OrderBy(a => a.SampleDt).Distinct().ToList(); 

,但需要对此进行扩展,以使重复的日期/时间戳具有唯一的日期/时间戳。

使用linq,我想查找所有重复的日期/时间戳记(注意2017-05-21 19:30:44.000如何重复),然后将重复项中的每个条目增加1毫秒以使其唯一。最终结果将只是唯一的日期/时间戳记

最终结果将是:

Date/Time                                  Value
10/1/2018 2017-05-21 19:30:44.000          11
10/1/2018 2017-05-21 19:30:44.100          12
10/2/2018 2017-05-21 19:31:44.000          9
10/3/2018 2017-05-21 19:32:44.000          8
10/4/2018 2017-05-21 19:33:44.000          12

主要是我不能有重复的日期/时间戳。我需要通过附加使其独特的方式使其具有独特性。

1 个答案:

答案 0 :(得分:3)

假设另一个记录不可能具有比另一个记录落后一毫秒的DateTime值,则可以使用以下方法:

var duplicates = table.GroupBy(x => x.SampleDt).Where(g => g.Count() > 1);
foreach (var dupGroup in duplicates)
{
    int index = 0;
    foreach (var entity in dupGroup.Skip(1))
    {
        entity.SampleDt = entity.SampleDt.AddMilliseconds(++index);
    }
}

但是请记住,这种方法是有问题的,您要增加一毫秒而不知道结果DateTime是否还没有被其他记录使用。