Esto es exactamente el OrderedDictionary en PowerCollections. Es prácticamente idéntico a SortedDictionary (árbol rojo negro con genéricos) con la capacidad de establecer una tecla de inicio/finalización y escanear todos los valores en ese rango.
SortedDicionary solo permite exponer una función GetEnumerator() que comienza al principio de la colección y solo permite una llamada a MoveNext(), por lo que incluso si usa LINQ no ocurre nada mágico: comienza al principio y ejecuta su expresión en cada nodo, en orden, hasta que encuentre aquellos que coincidan con su expresión LINQ.
OrderedDictionary tiene una función que obtiene un enumerador en o antes de una clave particular y que hace la búsqueda en O (log n).
Sin embargo, una palabra de advertencia: el enumerador en PowerCollections OrderedDictionary se implementa utilizando "rendimiento" y el uso de la memoria y el rendimiento de enumeración es al menos O (n^2) ... puede cambiar la implementación usted mismo para hacerlo implementar un enumerador tradicional y ambos problemas desaparecen. Enviaré ese parche a Codeplex si alguna vez puedo encontrar el tiempo.
Respondiendo a su otra pregunta, llamada "Libro o profesor", la * realmente * mejor forma de aprender a programar es * escribir programas *. Escribe esto por tu cuenta y luego aprenderás algo. –
@Pavel: podría escribir esto, pero estoy buscando algo listo, así puedo continuar desarrollando los lados principales de mi programa y acelerar el desarrollo. –