Click here to Skip to main content
65,938 articles
CodeProject is changing. Read more.
Articles / Languages / VB

GroupBy Multiple Values in LINQ

4.20/5 (3 votes)
23 Apr 2009CPOL 26.2K  
A simple example to show you how to GroupBy Multiple Values using LINQ

Introduction

Here's a simple example to show you how to GroupBy Multiple Values using LINQ. In this example, I am grouping by Age and Sex to find the count of people who have the same age and sex.

C#

C#
public partial class LINQ : System.Web.UI.Page 
{
    protected void Page_Load(object sender, EventArgs e) 
    {
      List<Employee> empList = new List<Employee>(); 
      empList.Add(new Employee() { ID = 1, FName = "John", Age=23, Sex='M'  });
      empList.Add(new Employee() { ID = 2, FName = "Mary", Age = 25, Sex = 'F' }); 

      empList.Add(new Employee() { ID = 3, FName = "Amber", Age = 23, Sex = 'M' }); 
      empList.Add(new Employee() { ID = 4, FName = "Kathy", Age=25, Sex='M'});
      empList.Add(new Employee() { ID = 5, FName = "Lena", Age=27, Sex='F'}); 

      empList.Add(new Employee() { ID = 6, FName = "Bill", Age = 28, Sex = 'M' }); 

      empList.Add(new Employee() { ID = 7, FName = "Celina", Age = 27, Sex = 'F' }); 
      empList.Add(new Employee() { ID = 8, FName = "John", Age = 28, Sex = 'M' });
  
      var sums = empList
               .GroupBy(x => new { x.Age, x.Sex }) 
               .Select(group => new { Peo = group.Key, Count = group.Count() });
  
      foreach (var employee in sums)          
          Response.Write(employee.Count + ": " + employee.Peo);
    } 

    class Employee 
    {
        public int ID { get; set; } 
        public string FName { get; set; }
        public int Age { get; set; } 
        public char Sex { get; set; }
    }

VB.NET

VB.NET
Partial Public Class LINQ 
    Inherits System.Web.UI.Page  

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) 
        Dim empList As New List(Of Employee)()
        empList.Add(New Employee() With _
		{.ID = 1, .FName = "John", .Age = 23, .Sex = "M"c}) 
        empList.Add(New Employee() With _
		{.ID = 2, .FName = "Mary", .Age = 25, .Sex = "F"c})
        empList.Add(New Employee() With _
		{.ID = 3, .FName = "Amber", .Age = 23, .Sex = "M"c}) 
        empList.Add(New Employee() With _
		{.ID = 4, .FName = "Kathy", .Age = 25, .Sex = "M"c})
        empList.Add(New Employee() With _
		{.ID = 5, .FName = "Lena", .Age = 27, .Sex = "F"c}) 
        empList.Add(New Employee() With _
		{.ID = 6, .FName = "Bill", .Age = 28, .Sex = "M"c})
        empList.Add(New Employee() With _
		{.ID = 7, .FName = "Celina", .Age = 27, .Sex = "F"c}) 
        empList.Add(New Employee() With _
		{.ID = 8, .FName = "John", .Age = 28, .Sex = "M"c})
        Dim sums = empList.GroupBy(Function(x) New With {Key x.Age,
            Key x.Sex}).Select(Function(group) New With {Key .Peo = group.Key,
            Key .Count = group.Count()}) 

        For Each employee In sums 
            ' use employee.Count and employee.Key
        Next employee 

    End Sub 
 
    Public Class Employee 
        Private privateID As Integer
        Public Property ID() As Integer 

            Get 
                Return privateID
            End Get 

            Set(ByVal value As Integer) 
                privateID = value
            End Set 

        End Property 

        Private privateFName As String 
        Public Property FName() As String
            Get 
                Return privateFName
            End Get 

            Set(ByVal value As String) 
                privateFName = value
            End Set 
        End Property  

        Private privateAge As Integer 
        Public Property Age() As Integer
            Get 
                Return privateAge
            End Get 

            Set(ByVal value As Integer) 
                privateAge = value
            End Set 
        End Property  

        Private privateSex As Char 
        Public Property Sex() As Char
            Get 
                Return privateSex
            End Get 

            Set(ByVal value As Char) 
                privateSex = value
            End Set 
        End Property
    End Class 

End Class

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)