Practical .NET

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/.

comments powered by Disqus

Featured

  • Clustering Non-Numeric Data Using C#

    Clustering non-numeric -- or categorial -- data is surprisingly difficult, but it's explained here by resident data scientist Dr. James McCaffrey of Microsoft Research, who provides all the code you need for a complete system using an algorithm based on a metric called category utility (CU), a measure how much information you gain by clustering.

  • So What's Up with Microsoft's (and Everyone Else's) Love of Rust?

    Microsoft already stewards several popular programming languages -- C#, TypeScript, F# -- so what's up with its love of Rust, along with the rest of the world?

  • C# Steps Up Programming Language Popularity Ladder

    Microsoft's C# programming language climbed a year-over-year notch on the TIOBE Index, which measures popularity among developers.

  • VS Code Java Tool Updates Debugging, Refactoring

    The monthly update to the tooling that boosts Java development in the open source, cross-platform Visual Studio Code editor highlights debugging, refactoring and more.

  • Microsoft Plugs Away at Blazor for Mobile in Preview 3

    Microsoft is furthering its work to target mobile app development with Blazor, the ASP.NET Core offering that originally was developed to allow for C#-based web development instead of JavaScript through the use of WebAssembly for the client side.

.NET Insight

Sign up for our newsletter.

Terms and Privacy Policy consent

I agree to this site's Privacy Policy.

Upcoming Events