如何快速过滤满足日期范围条件的对象

Rob*_*nik 6 c# collections filtering date-range

我有很多对象

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; }
}
Run Code Online (Sandbox Code Playgroud)

我可以拥有

IList<Restricton> restrictions;
Run Code Online (Sandbox Code Playgroud)

然后搜索在特定日期应用的限制

restrictions.Where(r => day >= r.From && day <= r.To);
Run Code Online (Sandbox Code Playgroud)

问题

我认为使用IList<T>不是最佳选择,因为我将对这些限制进行大量搜索,每次调用LINQ方法时.Where,都会枚举和过滤整个集合.

从SQL知识我知道表扫描总是比索引扫描更糟,所以我想在这里应用类似的逻辑.每次我宁愿以更聪明的方式过滤,而不是枚举整个集合.

什么是更好(更快)的枚举我的限制的方法,所以我的算法不会每次我想要过滤掉一些算法时都会对它们进行枚举?

我在想,IDictionary<K,V>但它仍然需要扫描它们,因为我的限制不是每天设定,而是每天设定.

你会建议什么?

Jon*_*eet 3

考虑对列表进行排序From- 然后您可以快速执行二分搜索来查找可能适用于 的限制子集From

您可能还希望获得按以下顺序排序的列表的第二个副本To- 然后,您可以执行二分搜索来查找适用于 的限制子集To。对于这两个列表,您可以执行分搜索,并找出哪个集合较小,并且只考虑该集合。

很可能有更好的选择,但这是一个好的开始,而且我现在没有足够的精力来解决更好的问题:(