About two years ago i worked with some linq to object queries that processed a lot of data. There i thought about implementing some indexing strategy for Linq to objects. I tried some things but then i lost interest. About half a year ago i had the same problem again and so i started thinking about this indexing thing again. So i started to implement the LinqIndex project. You can download it from codeplex (LinqIndex) (the project contains the test i wrote to check the perfomance). In this and the next blog entries i will write about the problems i had while implementing it, how i solved some of this problems and i will show how to use LinqIndex.
For introduction i have to say that the LinqIndex project should not be used very carefully in productive code because there are many cases that are not covered by LinqIndex and the error handling is very poor.
So first of all i will show the structure of LinqIndex and what parts it contains.
The most important parts of LinqIndex are the IndexSpecification and the IndexDefinitionExtensions. This image shows the uml diagramm of this two classes.
With the IndexSpecification class it is possible to specifie an index. The IndexDefinitionExtension contains the Where, Join and GroupJoin extension methodes to use the spefied index columns. If you want to use LinqIndex that are the two classes you need. But to understand what LinqIndex does we need the classes from the LinqIndex.IndexBuilding namespace.
In the LinqIndex.IndexBuilding namespace the most importand classes are the EqualIndex, Index classes that represent the created index. In my next post i will show how you could use LinqIndex to speed up linq queries.