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

  • Uno Platform Ports Windows Calculator to Linux

    Uno Platform has ported the famed Windows Calculator, open sourced last year, to Linux as part of a continuing "proof point" effort to demonstrate the reach of what it describes as the sole UI offering available to target Windows, WebAssembly, iOS, macOS, Android and Linux with single-codebase applications coded in C# and XAML.

  • ASP.NET Core OData 8 Preview Supports .NET 5, but with Breaking Changes

    ASP.NET Core OData, which debuted in July 2018, is out in a v8.0 preview that for the first time supports the upcoming .NET 5 milestone release.

  • VS Code Java Team Details 5 Best Dev Practices

    Microsoft's Visual Studio Code team for Java development added a new Coding Pack for Java installer and detailed best practices for setting up a development environment.

  • Binary Classification Using PyTorch: Defining a Network

    Dr. James McCaffrey of Microsoft Research tackles how to define a network in the second of a series of four articles that present a complete end-to-end production-quality example of binary classification using a PyTorch neural network, including a full Python code sample and data files.

  • Blazor Debugging Boosted in .NET 5 RC 2

    In highlighting updates to ASP.NET Core in the just-launched second and final Release Candidate of .NET 5, Microsoft pointed out better debugging for Blazor, the red-hot project that allows for C# coding of web projects.

Upcoming Events