This documentation is archived and is not being maintained.

Lookup(Of TKey, TElement) Class

Represents a collection of keys each mapped to one or more values.

Namespace:  System.Linq
Assembly:  System.Core (in System.Core.dll)

Public Class Lookup(Of TKey, TElement) _
	Implements ILookup(Of TKey, TElement), IEnumerable(Of IGrouping(Of TKey, TElement)),  _
Dim instance As Lookup(Of TKey, TElement)

Type Parameters


The type of the keys in the Lookup(Of TKey, TElement).


The type of the elements of each IEnumerable(Of T) value in the Lookup(Of TKey, TElement).

A Lookup(Of TKey, TElement) resembles a Dictionary(Of TKey, TValue). The difference is that a Dictionary(Of TKey, TValue) maps keys to single values, whereas a Lookup(Of TKey, TElement) maps keys to collections of values.

You can create an instance of a Lookup(Of TKey, TElement) by calling ToLookup on an object that implements IEnumerable(Of T).


There is no public constructor to create a new instance of a Lookup(Of TKey, TElement). Additionally, Lookup(Of TKey, TElement) objects are immutable, that is, you cannot add or remove elements or keys from a Lookup(Of TKey, TElement) object after it has been created.

The following example creates a Lookup(Of TKey, TElement) from a collection of objects. It then enumerates the Lookup(Of TKey, TElement) and outputs each key and each value in the key's associated collection of values. It also demonstrates how to use the properties Count and Item and the methods Contains and GetEnumerator.

Structure Package
    Public Company As String 
    Public Weight As Double 
    Public TrackingNumber As Long
End Structure 

Sub LookupExample()
    ' Create a list of Packages to put into a Lookup data structure. 
    Dim packages As New System.Collections.Generic.List(Of Package)(New Package() _
        {New Package With {.Company = "Coho Vineyard", .Weight = 25.2, .TrackingNumber = 89453312L}, _
          New Package With {.Company = "Lucerne Publishing", .Weight = 18.7, .TrackingNumber = 89112755L}, _
          New Package With {.Company = "Wingtip Toys", .Weight = 6.0, .TrackingNumber = 299456122L}, _
          New Package With {.Company = "Contoso Pharmaceuticals", .Weight = 9.3, .TrackingNumber = 670053128L}, _
          New Package With {.Company = "Wide World Importers", .Weight = 33.8, .TrackingNumber = 4665518773L}})

    ' Create a Lookup to organize the packages. Use the first character of Company as the key value. 
    ' Select Company appended to TrackingNumber for each element value in the Lookup. 
    Dim lookup As ILookup(Of Char, String) = _
        packages.ToLookup(Function(ByVal p) Convert.ToChar(p.Company.Substring(0, 1)), _
                          Function(ByVal p) p.Company & " " & p.TrackingNumber)

    Dim output As New System.Text.StringBuilder
    ' Iterate through each IGrouping in the Lookup and output the contents. 
    For Each packageGroup As IGrouping(Of Char, String) In lookup
        ' Print the key value of the IGrouping.
        ' Iterate through each value in the IGrouping and print its value. 
        For Each str As String In packageGroup
            output.AppendLine(String.Format("    {0}", str))

    ' Display the output.

    ' This code produces the following output: 
    ' C 
    '     Coho Vineyard 89453312 
    '     Contoso Pharmaceuticals 670053128 
    ' L 
    '     Lucerne Publishing 89112755 
    ' W 
    '     Wingtip Toys 299456122 
    '     Wide World Importers 4665518773 

    ' Get the number of key-collection pairs in the Lookup. 
    Dim count As Integer = lookup.Count

    ' Select a collection of Packages by indexing directly into the Lookup. 
    Dim cgroup As System.Collections.Generic.IEnumerable(Of String) = lookup("C"c)

    output = New System.Text.StringBuilder
    ' Output the results.
    output.AppendLine(vbCrLf & "Packages that have a key of 'C':")
    For Each str As String In cgroup

    ' Display the output.

    ' This code produces the following output: 
    ' Packages that have a key of 'C' 
    ' Coho Vineyard 89453312 
    ' Contoso Pharmaceuticals 670053128 

    ' Determine if there is a key with the value 'G' in the Lookup. 
    Dim hasG As Boolean = lookup.Contains("G"c)
End Sub

  System.Linq.Lookup(Of TKey, TElement)

Any public static (Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008 R2, Windows Server 2008, Windows Server 2003, Windows CE, Windows Mobile for Smartphone, Windows Mobile for Pocket PC, Xbox 360, Zune

The .NET Framework and .NET Compact Framework do not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.

.NET Framework

Supported in: 3.5

.NET Compact Framework

Supported in: 3.5

XNA Framework

Supported in: 3.0