Итак, вам нужен оператор LINQ, который проверяет, равно ли Occurrences[i].Start
selectedDates[i]
для всех индексов. Вы хотите остановиться, как только найдете неравную последовательность.
Я бы посоветовал сначала выбрать свойство Start, а затем проверить, соответствует ли полученная последовательность selectedDates:
List<Occurence> occurences = ...
List<DateTime> selectedDates = ...
var allDatesEqual = occurrences.Count == selectedDates.Count
&& occurrences.Select(occurrence => occurence.Start)
.SequenceEqual(selectedDates);
Обычно SequenceEqual проверяет длину, если обе последовательности реализуют ICollection. Однако результат Select
не реализует ICollection, поэтому для этой оптимизации вам нужно будет самостоятельно проверить счетчик.
Я читал, что вы заказываете последовательности перед началом сравнения. Если все даты уникальны, рассмотрите возможность использования HashSet<DateTime>
List<Occurence> occurences = ...
HashSet<DateTime> datesSet = new HashSet<DateTime>(selectedDates);
var allDatesEqual = datesSet.SetEquals(occurrences
.Select(occurrence => occurence.Start));
SetEquals возвращает true, если они содержат точно такие же элементы, игнорируя порядок, поэтому set {A, B, C} равно set {B , C, A}, но не равно ни {A, B}, ни {A, B, C, D}