У меня есть список дат как:
- 21/12/2019
- 22/12/2019
- 22/12/2019
- 24/12/2019
- 26/12/2019
- 26/12/2019
- 27/12/2019
У меня есть модель правила, определенная как:
public class Timing
{
public int PeriodNbMinutes { get; set; }
public int NbTimes { get; set; }
public bool IsConsecutive { get; set; }
public int Multiplicity { get; set; }
}
Теперь у меня есть правило: Я хочу найти все даты, где:
Даты, которые появляются 3 раза в2 дня и два раза
Итак, я должен получить две группы (я не хочу повторно использовать даты уже в группе):
Первый
1-й: 21/12/2019 - 22/12/2019 - 22/12/2019
Второй
2-е: 26/12/2019 - 26/12/2019- 27/12/2019
Тогда у меня есть такое правило:
this.PeriodMinutes = 2680;
this.NbTimes = 2;
this.Multiplicity = 2;
this.IsConsecutive=true;
Отредактировано
public int PeriodNbMinutes { get; set; }
public int NbTimes { get; set; }
public bool IsConsecutive { get; set; }
public int Multiplicity { get; set; }
internal bool Test(List<DateTime> metrics)
{
bool res = false;
int times = 0;
int multiple=0;
TimeSpan ts = new TimeSpan(0, PeriodNbMinutes, 0);
for (int i = 0; i < metrics.Count; i++)
{
var dates = metrics.Skip(i);
var selectedDts = metrics.Zip(dates, (dtFirst, dtNext) => (dtNext - dtFirst).Ticks < ts.Ticks);
if (selectedDts.Count() > 0)
{
res = true;
times++;
if (times == Multiplicity)
{
multiple++;
if (multiple == Multiplicity)
return true;
// Consecutive???
}
else res = false;
}
else
{
res = false;
times = 0;
}
}
return res;
}
Как я могу найти эти группы с Linq? Я пробовал использовать TimeSpan, но не могу заставить его работать.
Кроме того, в двух выбранных группах мне нужно знать, последовательны они или нет.
Я пробовал много разных решений. но ничего хорошего. Как я могу сделать это просто?
Спасибо,