C# ToLookup Method

ToLookup returns a data structure that allows indexing. It is an extension method. It produces an ILookup instance that can be indexed or enumerated using a foreach-loop. The entries are combined into groupings at each key.

Example. First, this example uses an input string array of three string elements. The ToLookup method receives a Func delegate. This is specified as a lambda expression. The implicit type syntax (var) is used on the result of the ToLookup method.


Then: The key with value 3 and key with value 5 are accessed. The groupings are looped over. All groupings are accessed and enumerated.

C# program that uses ToLookup method

using System;
using System.Linq;

class Program
    static void Main()
	// Create an array of strings.
	string[] array = { "cat", "dog", "horse" };

	// Generate a lookup structure,
	// ... where the lookup is based on the key length.
	var lookup = array.ToLookup(item => item.Length);

	// Enumerate strings of length 3.
	foreach (string item in lookup[3])
	    Console.WriteLine("3 = " + item);

	// Enumerate strings of length 5.
	foreach (string item in lookup[5])
	    Console.WriteLine("5 = " + item);

	// Enumerate groupings.
	foreach (var grouping in lookup)
	    foreach (string item in grouping)


3 = cat
3 = dog
5 = horse

In the C# language, a lambda expression is a procedure specified in a different syntax. The formal parameters are specified on the left side of the => token, while the method body is specified on the right side.


Info: The lambda expression in this example specifies that the lookup value for each string is the string's length.

String Length

Therefore: With this lambda expression, a string such as "cat" will have a lookup value of 3.

ToDictionary. The Dictionary data structure requires that only one key be associated with one value. The ToLookup data structure, however, is more lenient. It allows one key to be associated with multiple values.


Summary. We saw the ToLookup extension method in the System.Linq namespace. This method is useful when you want to create a Dictionary-type data structure using LINQ but do not want to enforce a single key-value mapping strategy.

Because: The lookup data structure created by ToLookup allows multiple values on a single key.