Как быстро отфильтровать объекты, удовлетворяющие условию диапазона дат

У меня есть большая коллекция объектов

public class Restriction
{
    // which days this restriction applies to
    public DateTime From { get; set; }
    public DateTime To { get; set; }

    // valid applicable restriction range
    public int Minimum { get; set; }
    public int Maximum { get; set; }
}

, которые я мог бы получить

IList<Restricton> restrictions;

, а затем искать ограничения, которые применяются в конкретный день

restrictions.Where(r => day >= r.From && day <= r.To);

Проблема

Я полагаю, используя IList не лучший вариант, потому что я буду выполнять много поисков по этим ограничениям и каждый раз вызывать метод LINQ . Где вся коллекция будет перечисляться и фильтруется.

Из имеющихся у меня знаний SQL я знаю, что сканирование таблицы всегда хуже, чем сканирование индекса, поэтому я хотел бы применить здесь аналогичную логику. Вместо того, чтобы каждый раз перечислять всю коллекцию, я бы предпочел более интеллектуальную фильтрацию.

Вопрос

Каким будет лучший ( более быстрый ) способ перечислить мои ограничения, чтобы мой алгоритм не работал перечислять по ним каждый раз, когда я хотел бы отфильтровать несколько?

Я думал о IDictionary , но ему все равно нужно будет сканировать их все, потому что мои ограничения не установлены в день, а скорее за дневной диапазон.

Что бы вы посоветовали?

6
задан Robert Koritnik 11 October 2011 в 06:02
поделиться