Skip to main content

Count - Simple

This sample uses Count to get the number of unique factors of 300.

Public Sub Linq73()
    Dim factorsOf300() = {2, 2, 3, 5, 5}

    Dim uniqueFactors = factorsOf300.Distinct().Count()

    Console.WriteLine("There are " & uniqueFactors & " unique factors of 300.")
End Sub


Result:
There are 3 unique factors of 300.


Count - Conditional

This sample uses Count to get the number of odd ints in the array.

Public Sub Linq74()
    Dim numbers() = {5, 4, 1, 3, 9, 8, 6, 7, 2, 0}

    Dim oddNumbers = numbers.Count(Function(n) n Mod 2 = 1)

    Console.WriteLine("There are {0} odd numbers in the list.", oddNumbers)
End Sub

Result:
There are 5 odd numbers in the list.


Count - Nested

This sample uses Count to return a list of customers and how many orders each has.

Public Sub Linq76()
    Dim customers = GetCustomerList()

    Dim orderCounts = From c In customers _
        Select c.CustomerID, OrderCount = c.Orders.Count()

    ObjectDumper.Write(orderCounts)
End Sub


Result:
CustomerID=ALFKI OrderCount=6
CustomerID=ANATR OrderCount=4
CustomerID=ANTON OrderCount=7
CustomerID=AROUT OrderCount=13
CustomerID=BERGS OrderCount=18
CustomerID=BLAUS OrderCount=7
CustomerID=BLONP OrderCount=11
CustomerID=BOLID OrderCount=3
CustomerID=BONAP OrderCount=17
CustomerID=BOTTM OrderCount=14
CustomerID=BSBEV OrderCount=10
CustomerID=CACTU OrderCount=6
CustomerID=CENTC OrderCount=1
CustomerID=CHOPS OrderCount=8
CustomerID=COMMI OrderCount=5
CustomerID=CONSH OrderCount=3
CustomerID=DRACD OrderCount=6
CustomerID=DUMON OrderCount=4
CustomerID=EASTC OrderCount=8
CustomerID=ERNSH OrderCount=30
CustomerID=FAMIA OrderCount=7
CustomerID=FISSA OrderCount=0
CustomerID=FOLIG OrderCount=5
CustomerID=FOLKO OrderCount=19
CustomerID=FRANK OrderCount=15
CustomerID=FRANR OrderCount=3
CustomerID=FRANS OrderCount=6
CustomerID=FURIB OrderCount=8
CustomerID=GALED OrderCount=5
CustomerID=GODOS OrderCount=10
CustomerID=GOURL OrderCount=9
CustomerID=GREAL OrderCount=11
CustomerID=GROSR OrderCount=2
CustomerID=HANAR OrderCount=14
CustomerID=HILAA OrderCount=18
CustomerID=HUNGC OrderCount=5
CustomerID=HUNGO OrderCount=19
CustomerID=ISLAT OrderCount=10
CustomerID=KOENE OrderCount=14
CustomerID=LACOR OrderCount=4
CustomerID=LAMAI OrderCount=14
CustomerID=LAUGB OrderCount=3
CustomerID=LAZYK OrderCount=2
CustomerID=LEHMS OrderCount=15
CustomerID=LETSS OrderCount=4
CustomerID=LILAS OrderCount=14
CustomerID=LINOD OrderCount=12
CustomerID=LONEP OrderCount=8
CustomerID=MAGAA OrderCount=10
CustomerID=MAISD OrderCount=7
CustomerID=MEREP OrderCount=13
CustomerID=MORGK OrderCount=5
CustomerID=NORTS OrderCount=3
CustomerID=OCEAN OrderCount=5
CustomerID=OLDWO OrderCount=10
CustomerID=OTTIK OrderCount=9
CustomerID=PARIS OrderCount=0
CustomerID=PERIC OrderCount=6
CustomerID=PICCO OrderCount=10
CustomerID=PRINI OrderCount=6
CustomerID=QUEDE OrderCount=9
CustomerID=QUEEN OrderCount=13
CustomerID=QUICK OrderCount=28
CustomerID=RANCH OrderCount=5
CustomerID=RATTC OrderCount=18
CustomerID=REGGC OrderCount=12
CustomerID=RICAR OrderCount=11
CustomerID=RICSU OrderCount=10
CustomerID=ROMEY OrderCount=5
CustomerID=SANTG OrderCount=6
CustomerID=SAVEA OrderCount=31
CustomerID=SEVES OrderCount=9
CustomerID=SIMOB OrderCount=7
CustomerID=SPECD OrderCount=4
CustomerID=SPLIR OrderCount=9
CustomerID=SUPRD OrderCount=12
CustomerID=THEBI OrderCount=4
CustomerID=THECR OrderCount=3
CustomerID=TOMSP OrderCount=5
CustomerID=TORTU OrderCount=10
CustomerID=TRADH OrderCount=7
CustomerID=TRAIH OrderCount=3
CustomerID=VAFFE OrderCount=11
CustomerID=VICTE OrderCount=10
CustomerID=VINET OrderCount=4
CustomerID=WANDK OrderCount=10
CustomerID=WARTH OrderCount=15
CustomerID=WELLI OrderCount=9
CustomerID=WHITC OrderCount=14
CustomerID=WILMK OrderCount=8
CustomerID=WOLZA OrderCount=7


Count - Grouped

This sample uses Count to return a list of categories and how many products each has.

Public Sub Linq77()
    Dim products = GetProductList()

    Dim categoryCounts = From p In products _
         Group p By p.Category Into Count() _
         Select Category, ProductCount = Count

    ObjectDumper.Write(categoryCounts)
End Sub

Result:
Category=Beverages ProductCount=12
Category=Condiments ProductCount=12
Category=Produce ProductCount=5
Category=Meat/Poultry ProductCount=6
Category=Seafood ProductCount=12
Category=Dairy Products ProductCount=10
Category=Confections ProductCount=13
Category=Grains/Cereals ProductCount=7


Sum - Simple

This sample uses Sum to get the total of the numbers in an array.

Public Sub Linq78()

    Dim numbers() As Integer = {5, 4, 1, 3, 9, 8, 6, 7, 2, 0}

    Dim numSum = numbers.Sum()

    Console.WriteLine("The sum of the numbers is " & numSum)
End Sub

Result:
The sum of the numbers is 45


Sum - Projection

This sample uses Sum to get the total number of characters of all words in the array.

Public Sub Linq79()
    Dim words() = {"cherry", "apple", "blueberry"}

    Dim totalChars = words.Sum(Function(w) w.Length)

    Console.WriteLine("There are a total of {0} characters in these words.", totalChars)
End Sub

Result:
There are a total of 20 characters in these words.


Sum - Grouped

This sample uses Sum to get the total units in stock for each product category.

Public Sub Linq80()
    Dim products = GetProductList()

    Dim categories = From p In products _
            Group p By p.Category Into Group _
            Select Category, TotalUnitsInStock = Group.Sum(Function(p) p.UnitsInStock)

    ObjectDumper.Write(categories)
End Sub

Result:
Category=Beverages TotalUnitsInStock=559
Category=Condiments TotalUnitsInStock=507
Category=Produce TotalUnitsInStock=100
Category=Meat/Poultry TotalUnitsInStock=165
Category=Seafood TotalUnitsInStock=701
Category=Dairy Products TotalUnitsInStock=393
Category=Confections TotalUnitsInStock=386
Category=Grains/Cereals TotalUnitsInStock=308


Min - Simple

This sample uses Min to get the lowest number in an array.

Public Sub Linq81()
    Dim numbers() = {5, 4, 1, 3, 9, 8, 6, 7, 2, 0}

    Dim minNum = numbers.Min()

    Console.WriteLine("The minimum number is " & minNum & ".")
End Sub

Result:
The minimum number is 0.


Min - Projection

This sample uses Min to get the length of the shortest word in an array.

Public Sub Linq82()
    Dim words() = {"cherry", "apple", "blueberry"}

    Dim shortestWord = words.Min(Function(w) w.Length)

    Console.WriteLine("The shortest word is {0} characters long.", shortestWord)
End Sub

Result:
The shortest word is 5 characters long.


Min - Grouped

This sample uses Min to get the cheapest price among each category's products.

Public Sub Linq83()
    Dim products = GetProductList()

    Dim categories = From p In products _
          Group p By p.Category Into Group _
          Select Category, CheapestPrice = Group.Min(Function(p) p.UnitPrice)

    ObjectDumper.Write(categories)
End Sub

Result:
Category=Beverages CheapestPrice=4.5
Category=Condiments CheapestPrice=10
Category=Produce CheapestPrice=10
Category=Meat/Poultry CheapestPrice=7.45
Category=Seafood CheapestPrice=6
Category=Dairy Products CheapestPrice=2.5
Category=Confections CheapestPrice=9.2
Category=Grains/Cereals CheapestPrice=7


Min - Elements

This sample uses Min to get the products with the cheapest price in each category.

Public Sub Linq84()
    Dim products = GetProductList()

    Dim categories = From p In products _
            Group p By p.Category Into Group _
            Let minPrice = Group.Min(Function(p) p.UnitPrice) _
            Select Category, CheapestProducts = Group.Where(Function(p) p.UnitPrice = minPrice)

    ObjectDumper.Write(categories, 1)
End Sub

Result:
Category=Beverages CheapestProducts=...
CheapestProducts: ProductID=24 ProductName=Guaraná Fantástica Category=Beverages UnitPrice=4.5 UnitsInStock=20
Category=Condiments CheapestProducts=...
CheapestProducts: ProductID=3 ProductName=Aniseed Syrup Category=Condiments UnitPrice=10 UnitsInStock=13
Category=Produce CheapestProducts=...
CheapestProducts: ProductID=74 ProductName=Longlife Tofu Category=Produce UnitPrice=10 UnitsInStock=4
Category=Meat/Poultry CheapestProducts=...
CheapestProducts: ProductID=54 ProductName=Tourtière Category=Meat/Poultry UnitPrice=7.45 UnitsInStock=21
Category=Seafood CheapestProducts=...
CheapestProducts: ProductID=13 ProductName=Konbu Category=Seafood UnitPrice=6 UnitsInStock=24
Category=Dairy Products CheapestProducts=...
CheapestProducts: ProductID=33 ProductName=Geitost Category=Dairy Products UnitPrice=2.5 UnitsInStock=112
Category=Confections CheapestProducts=...
CheapestProducts: ProductID=19 ProductName=Teatime Chocolate Biscuits Category=Confections UnitPrice=9.2 UnitsInStock=25
Category=Grains/Cereals CheapestProducts=...
CheapestProducts: ProductID=52 ProductName=Filo Mix Category=Grains/Cereals UnitPrice=7 UnitsInStock=38


Max - Simple

This sample uses Max to get the highest number in an array.

Public Sub Linq85()
    Dim numbers() = {5, 4, 1, 3, 9, 8, 6, 7, 2, 0}

    Dim maxNum = numbers.Max()

    Console.WriteLine("The maximum number is " & maxNum & ".")
End Sub

Result:
The maximum number is 9.


Max - Projection

This sample uses Max to get the length of the longest word in an array.

Public Sub Linq86()
    Dim words() = {"cherry", "apple", "blueberry"}

    Dim longestLength = words.Max(Function(w) w.Length)

    Console.WriteLine("The longest word is {0} characters long.", longestLength)
End Sub

Result:
The longest word is 9 characters long.


Max - Grouped

This sample uses Max to get the most expensive price among each category's products.

Public Sub Linq87()
    Dim products = GetProductList()

    Dim categories = From p In products _
         Group p By p.Category Into Group _
         Select Category, MostExpensivePrice = Group.Max(Function(p) p.UnitPrice)

    ObjectDumper.Write(categories)
End Sub

Result:
Category=Beverages MostExpensivePrice=263.5
Category=Condiments MostExpensivePrice=43.9
Category=Produce MostExpensivePrice=53
Category=Meat/Poultry MostExpensivePrice=123.79
Category=Seafood MostExpensivePrice=62.5
Category=Dairy Products MostExpensivePrice=55
Category=Confections MostExpensivePrice=81
Category=Grains/Cereals MostExpensivePrice=38


Max - Elements

This sample uses Max to get the products with the most expensive price in each category.

Public Sub Linq88()
    Dim products = GetProductList()

    Dim categories = From p In products _
            Group p By p.Category Into Group _
            Let maxPrice = Group.Max(Function(p) p.UnitPrice) _
            Select Category, MostExpensiveProducts = Group.Where(Function(p) p.UnitPrice = maxPrice)

    ObjectDumper.Write(categories, 1)
End Sub

Result:
Category=Beverages MostExpensiveProducts=...
MostExpensiveProducts: ProductID=38 ProductName=Côte de Blaye Category=Beverages UnitPrice=263.5 UnitsInStock=17
Category=Condiments MostExpensiveProducts=...
MostExpensiveProducts: ProductID=63 ProductName=Vegie-spread Category=Condiments UnitPrice=43.9 UnitsInStock=24
Category=Produce MostExpensiveProducts=...
MostExpensiveProducts: ProductID=51 ProductName=Manjimup Dried Apples Category=Produce UnitPrice=53 UnitsInStock=20
Category=Meat/Poultry MostExpensiveProducts=...
MostExpensiveProducts: ProductID=29 ProductName=Thüringer Rostbratwurst Category=Meat/Poultry UnitPrice=123.79 UnitsInStock=0
Category=Seafood MostExpensiveProducts=...
MostExpensiveProducts: ProductID=18 ProductName=Carnarvon Tigers Category=Seafood UnitPrice=62.5 UnitsInStock=42
Category=Dairy Products MostExpensiveProducts=...
MostExpensiveProducts: ProductID=59 ProductName=Raclette Courdavault Category=Dairy Products UnitPrice=55 UnitsInStock=79
Category=Confections MostExpensiveProducts=...
MostExpensiveProducts: ProductID=20 ProductName=Sir Rodney's Marmalade Category=Confections UnitPrice=81 UnitsInStock=40
Category=Grains/Cereals MostExpensiveProducts=...
MostExpensiveProducts: ProductID=56 ProductName=Gnocchi di nonna Alice Category=Grains/Cereals UnitPrice=38 UnitsInStock=21


Average - Simple

This sample uses Average to get the average of all numbers in an array.

Public Sub Linq89()
    Dim numbers() As Integer = {5, 4, 1, 3, 9, 8, 6, 7, 2, 0}

    Dim averageNum = numbers.Average()

    Console.WriteLine("The average number is " & averageNum & ".")
End Sub

Result:
The average number is 4.5.


Average - Projection

This sample uses Average to get the average length of the words in the array.

Public Sub Linq90()
    Dim words() = {"cherry", "apple", "blueberry"}

    Dim averageLength = words.Average(Function(w) w.Length)

    Console.WriteLine("The average word length is {0} characters.", averageLength)
End Sub

Result:
The average word length is 6.66666666666667 characters.


Average - Grouped

This sample uses Average to get the average price of each category's products.

Public Sub Linq91()
    Dim products = GetProductList()

    Dim categories = From p In products _
            Group p By p.Category Into Group _
            Select Category, AveragePrice = Group.Average(Function(p) p.UnitPrice)

    ObjectDumper.Write(categories)
End Sub

Result:
AveragePrice=37.979166666666666666666666667 Category=Beverages
AveragePrice=23.0625 Category=Condiments
AveragePrice=32.37 Category=Produce
AveragePrice=54.006666666666666666666666667 Category=Meat/Poultry
AveragePrice=20.6825 Category=Seafood
AveragePrice=28.73 Category=Dairy Products
AveragePrice=25.16 Category=Confections
AveragePrice=20.25 Category=Grains/Cereals


Aggregate - Simple

This sample uses Aggregate to create a running product on the array that calculates the total product of all elements.

Public Sub Linq92()
    Dim doubles() = {1.7, 2.3, 1.9, 4.1, 2.9}

    Dim product = doubles.Aggregate( _
                    Function(runningProduct, nextFactor) runningProduct * nextFactor)

    Console.WriteLine("Total product of all numbers: {0}", Product)
End Sub

Result:
Total product of all numbers: 88.33081


Aggregate - Seed

This sample uses Aggregate to create a running account balance that subtracts each withdrawal from the initial balance of 100, as long as the balance never drops below 0.

Public Sub Linq93()
    Dim startBalance = 100.0

    Dim attemptedWithdrawals() = {20, 10, 40, 50, 10, 70, 30}

    Dim endBalance = _
        attemptedWithdrawals.Aggregate(startBalance, _
        Function(balance, nextWithdrawal) _
                                        (If(nextWithdrawal <= balance, (balance - nextWithdrawal), balance)))

    Console.WriteLine("Ending balance: {0}", endBalance)
End Sub

Result:
Ending balance: 20