23.2. Old-School Queries

Instead of walking through exactly what LINQ is, let's start with an example that will demonstrate some of the savings that these queries offer. The scenario is one in which a researcher is investigating whether or not there is a correlation between the length of a customer's name and the customer's average order size. The relationship between a customer and the orders is a simple one-to-many as shown in Figure 23-2.

Figure 23.2. Figure 23-2

In the particular query we are examining, the researchers are looking for the average Milk order for customers with a first name greater than or equal to five characters, ordered by the first name:

Private Sub OldStyleQuery()
    Dim customers As Customer() = BuildCustomers()

    Dim results As New List(Of SearchResult)
    Dim matcher As New SearchForProduct("Milk")

    For Each c As Customer In customers
        If c.FirstName.Length >= 5 Then
            Dim orders As Order() = Array.FindAll(c.Orders, _
                                                   AddressOf matcher.ProductMatch)
            Dim cr As New SearchResult
            cr.Customer = c.FirstName & " " & c.LastName
            For Each o As Order In orders
                cr.Quantity += o.Quantity
                cr.Count += 1
Next
            results.Add(cr)
        End If
    Next

    results.Sort(New Comparison(Of SearchResult)(AddressOf CompareSearchResults))

    ObjectDumper.Write(results)
End Sub

Before we jump in and show how LINQ can improve this snippet, let's examine how this snippet works. The opening line calls out to ...

Get Professional Visual Studio® 2008 now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.