Free Web Development Online Tutorials, Learn to Code
Learn LINQ with C#, Language Integrated query with different Data Providers

GroupBy in LINQ Example

Grouping is one of the very powerful 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 your 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";     
}

How to use Groupby in LINQ

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

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.

Comment
Name
Email
Website
Subscribe
 
Learn LINQ .Net

LINQ GroupBy C# Example, How to use Group by in LINQ Query

linq Interview Questions Answers

LINQ C# examples | Join Asp.net MVC Course