GroupBy in LINQ Example

Grouping is one of the very useful features provided by LINQ, This method is often used when we have a large number of data to displayed in different group wise.

To understand, how to use group by clause in LINQ query , first we create a class called “Student”, then we create a collection object of that class, then try to use group by clause with query syntax and method syntax.

public class Student
{
    public Student()
    {
    }
    public string FullName { get; set; } = "Not Set";
    public int StreamId { get; set; }
    public int Score { get; set; } = 0;    
    public string Subjects { get; set; } = "All";     
}

Here we learn how to use Groupby in LINQ with few easy examples

How to use Groupby in LINQ

Here we have created a collection object, now we use this collection object in all following group by examples

    var studentsStream = new List<Student> { 
    new Student { FullName = "Aruna", StreamId=1,  Score = 10 },
    new Student { FullName = "Janet", StreamId=2,  Score = 9  },
    new Student { FullName = "Ajay", StreamId=1,  Score = 11 },
    new Student { FullName = "Kunal", StreamId=2,  Score = 13  },
    new Student { FullName = "Chandra", StreamId=2,  Score = 8  },
};
Group by in linq with single column

Here is an example how we can use group by clause based on single column

var groupScores =
from techStream in studentsStream
group techStream by techStream.StreamId into studentGroup
select new
{
Stream = studentGroup.Key,
GroupScore = studentGroup.Sum(x => x.Score), 
};
foreach (var scr in groupScores)
{
    Console.WriteLine(string.Format("{0}-{1}", scr.Stream, scr.GroupScore));
}

In above code we have calculated the scrore of each group, here is the result

1 - 21
2 - 30
Group by in linq with sum

In above example if you notice, we have used sum function to get the sum of score, here is the piece of code again

var groupScores =
from techStream in studentsStream
group techStream by techStream.StreamId into studentGroup
select new
{
Stream = studentGroup.Key,
GroupScore = studentGroup.Sum(x => x.Score), 
};
Group by multiple columns

Here is an example of using group by clause with multiple columns.

Notice, we are holding the collection into an Anonymous type variable.

// Anonymous type variable
var students =
  from s in studentsStream
  group s by new { s.StreamId, s.Score } into g
  orderby g.Key.StreamId
  select new { StreamId = g.Key.StreamId, Score = g.Key.Score, TotalCount = g.Count() };
foreach (var stu in students)
    {
        Console.Write($"{stu.StreamId} : {stu.TotalCount} \n");
        Console.Write("************** \n");
    }
Group by method syntax example

The same query also can be written this way using method syntax

In method syntax if you want to have multiple columns then put the inside new { column1, column1}

// Anonymous type variable
var students1 =
studentsStream
.GroupBy(s => new { s.Score, s.StreamId})
.OrderBy(g => g.Key.StreamId)
.Select(g => new { StreamId = g.Key, TotalCount = g.Count() });
foreach (var stu in students1)
{
    Console.Write($"{stu.StreamId} : {stu.TotalCount} \n");
    Console.Write("************** \n");
}

Both above methods will give same result.

You may be interested in following tutorial

 
LINQ GroupBy Example C#: How to use Group by in LINQ Query
LINQ (language integrated query) allow you to write query on database objects like ado.net, entity framework etc, LINQ is type safe, easy to convert database object to list objects and business objects in secure and scalable way.
linq Interview Questions Answers
LINQ C# examples | Join Asp.net MVC Course