LINQ to Objects и улучшенная производительность с помощью индекса?

Я использую LINQ to Objects и задаюсь вопросом, можно ли улучшить производительность моих запросов, используя имеющийся у меня индекс. Лучше всего это пояснить на примере. Представьте себе простой тип ...

public class Person
{
    public int Age;
    public string FirstName;
    public string LastName;
}

И простой запрос, который я бы сделал против него ...

List<Person> people = new List<Person>();

// 'people' populated with 50,000 instances...

var x = from t in people
        where t.Age > 18 && t.Age < 21
        select t;

Если я правильно понимаю LINQ to Objects, то реализация метода расширения Where перечислит все 50 000 экземпляров в коллекции людей в чтобы найти 100 действительно совпадающих. Так получилось, что у меня уже есть индекс коллекции людей, отсортированный по возрасту. Подобно этому ...

SortedList<int, Person> ageSorted = new SortedList<int, Person>();

Очевидно, было бы разумно, если бы я мог получить Где использовать SortedList, чтобы ему больше не приходилось перечислять все 50 000 экземпляров, вместо этого находя диапазон из 100 совпадающих записей и, таким образом, экономя время.

Можно ли расширить LINQ на объекты, чтобы разрешить мою ситуацию? Возможно ли это уже, но мне не хватает техники?

9
задан Phil Wright 3 October 2011 в 21:49
поделиться