Convert .NET Framework Lists into Dictionaries
You probably use ToList to convert your LINQ results into Lists. It's almost as easy to convert any collection into a Dictionary whose items you can retrieve by key.
The ToList method, when applied to a LINQ query running against Entity Framework, causes Entity Framework to go out and retrieve all of your objects and convert them into a .NET Framework List collection. Lists are all very good (you can loop through them) but the only way to retrieve a unique item from the List is to run another LINQ query against it.
It might be handier to convert the results of your LINQ query (or any other collection) into a Dictionary where each object is stored under a specific key value. For example, this code defines a dictionary with a key of type string, holding a value of type Salesorder:
Dim soDict As Dictionary(Of String, Salesorder)
To convert an Entity Framework collection into a Dictionary, all you have to do is call the ToDictionary method on the query, passing a lambda expression that specifies what value to use as the key. This example stores each Salesorder object in the Dictionary with the key set to the Salesorder's CustomerId:
soDict = (From so In db.Salesorders
Select so).ToDictionary(Function(so) so.CustomerId)
Then I just have to write this code:
Dim so As Salesorder
so = soDict("A123")
if I now want to retrieve the Salesorder for customer A123.
About the Author
Peter Vogel is a system architect and principal in PH&V Information Services. PH&V provides full-stack consulting from UX design through object modeling to database design. Peter tweets about his VSM columns with the hashtag #vogelarticles. His blog posts on user experience design can be found at http://blog.learningtree.com/tag/ui/.