LINQ Average Method in C#

LINQ Average Method in C# with Examples

In this article, I am going to discuss the LINQ Average Method in C# with Examples. Please read our previous article before proceeding to this article where we discussed the LINQ Min Aggregate Method in C# with Examples. As part of this article, we are going to discuss the following pointers.

  1. What is LINQ Average Method in C#?
  2. Multiple Examples to Understand Average Method using both Method and Query Syntax.
What is LINQ Average Method in C#?

The LINQ  Average() Method belongs to the category of Aggregate Operators. The LINQ Average method is used to calculate the average of numeric values from the collection on which it is applied. This Average method can return nullable or non-nullable decimal, float, or double values. 

Example to Understand Average Method in C#:

Let us understand the LINQ Average() method with Examples using C#. The following example calculates the average of all integers present in the integer collection using both query and method syntax. The point that you need to remember is the Average Method is going to work with numeric values only. In this case, the collection stores integer values, and hence we can apply the LINQ Average Method. We don’t have any operator called average in the LINQ query syntax. So here we need to use mixed syntax.

using System;
using System.Linq;
namespace LINQDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] intNumbers = new int[] { 60, 80, 50, 90, 10, 30, 70, 40, 20, 100 };

            //Using Method Syntax
            var MSAverageValue = intNumbers.Average();

            //Using Query Syntax
            var QSAverageValue = (from num in intNumbers
                                  select num).Average();

            Console.WriteLine("Average Value = " + MSAverageValue);
            Console.ReadKey();
        }
    }
}

Output: Average Value = 55

Example to Understand LINQ Average Method with Where Extension Method using C#

Let us see an example to Understand how we can use the LINQ Average Method along with the Where Extension Method in C# using both Method and Query Syntax. Now our requirement is to calculate the average of all numbers which is greater than 50. The following example code exactly does the same.

using System;
using System.Linq;
namespace LINQDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] intNumbers = new int[] { 60, 80, 50, 90, 10, 30, 70, 40, 20, 100 };

            //Using Method Syntax
            var MSAverageValue = intNumbers.Where(num => num > 50).Average();

            //Using Query Syntax
            var QSAverageValue = (from num in intNumbers
                                  where num > 50
                                  select num).Average();

            Console.WriteLine("Average Value = " + MSAverageValue);
            Console.ReadKey();
        }
    }
}

Output: Average Value = 80

Example to Understand How to use LINQ Sum Method with Predicate in C#

Let us see an example to Understand How to use LINQ Average Method with Predicate in C# using both Method and Query Syntax. Instead of using the Where Extension method to filter the data, we can also use the other overloaded version of the Average method which takes a Predicate as a parameter, and within that predicate, we can write the logic to filter the data. In the below example, within the Average Method, we are using a Predicate and we are providing the condition of whether the number is greater than 50 or not. If the number is greater than 50, then we are returning true else we are returning false. The following example will calculate the average of all integers which are greater than 50.

using System;
using System.Linq;
namespace LINQDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] intNumbers = new int[] { 10, 30, 50, 40, 60, 20, 70, 90, 80, 100 };

            //Using Method Syntax with a Predicate
            var MSAverageValue = intNumbers.Average(num => {
                if (num > 50)
                    return num;
                else
                    return 0;
            });

            //Using Query Syntax with a Predicate
            var QSAverageValue = (from num in intNumbers
                           select num).Average(num => {
                               if (num > 50)
                                   return num;
                               else
                                   return 0;
                           });

            Console.WriteLine("Average Value = " + QSAverageValue);

            Console.ReadKey();
        }
    }
}

Output: Average Value = 40

Example to Understand LINQ Average Method with Complex Type in C#:

Let us see an example to Understand How to use LINQ Average Method with Complex Type in C# using both Method and Query Syntax. We are going to work with the following Employee class. As you can see, it is a very simple Employee class with four properties such as ID, Name, Salary, and Department. Here, we also created one method i.e. GetAllEmployees() which will return the list of all the employees and this is going to be our data source.

using System.Collections.Generic;
namespace LINQDemo
{
    public class Employee
    {
        public int ID { get; set; }
        public string Name { get; set; }
        public int Salary { get; set; }
        public string Department { get; set; }

        public static List<Employee> GetAllEmployees()
        {
            List<Employee> listStudents = new List<Employee>()
            {
                new Employee{ID= 101,Name = "Preety", Salary = 10000, Department = "IT"},
                new Employee{ID= 102,Name = "Priyanka", Salary = 15000, Department = "Sales"},
                new Employee{ID= 103,Name = "James", Salary = 50000, Department = "Sales"},
                new Employee{ID= 104,Name = "Hina", Salary = 20000, Department = "IT"},
                new Employee{ID= 105,Name = "Anurag", Salary = 30000, Department = "IT"},
                new Employee{ID= 106,Name = "Sara", Salary = 25000, Department = "IT"},
                new Employee{ID= 107,Name = "Pranaya", Salary = 35000, Department = "IT"},
                new Employee{ID= 108,Name = "Manoj", Salary = 11000, Department = "Sales"},
                new Employee{ID= 109,Name = "Sam", Salary = 45000, Department = "Sales"},
                new Employee{ID= 110,Name = "Saurav", Salary = 25000, Department = "Sales"}
            };

            return listStudents;
        }
    }
}

Now, our requirement is to calculate the Average Salaries of all the Employees. The following example calculates the Average Salaries of all employees using the LINQ Average method with both Method and Query Syntax. Here, to the Average method, we are specifying the numeric Salary column using a lambda expression.

using System;
using System.Linq;
namespace LINQDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            //Using Method Syntax
            var MSAverageSalary = Employee.GetAllEmployees()
                                 .Average(emp => emp.Salary);

            //Using Query Syntax
            var QSAverageSalary = (from emp in Employee.GetAllEmployees()
                                  select emp).Average(e => e.Salary);

            Console.WriteLine("Average Salary = " + MSAverageSalary);
            Console.ReadKey();
        }
    }
}

Output: Average Salary = 26600

Example using Average and Where Extension Method in C#:

Let us see an example to Understand How to use both LINQ Average and Where Extension Methods with Complex Type using both Method and Query Syntax. Our requirement is to calculate the average salary of all the employees who belong to the IT department. The following example exactly does the same. Using the Where Extension Method we are filtering the IT department employees and using the Average method we are specifying the Salary numeric column which will calculate the average salary of IT department employees.

using System;
using System.Linq;
namespace LINQDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            //Using Method Syntax
            var MSAverageSalary = Employee.GetAllEmployees()
                                 .Where(emp => emp.Department == "IT")
                                 .Average(emp => emp.Salary);

            //Using Query Syntax
            var QSAverageSalary = (from emp in Employee.GetAllEmployees()
                                   where emp.Department == "IT"
                                   select emp).Average(e => e.Salary);

            Console.WriteLine("IT Department Average Salary = " + MSAverageSalary);
            Console.ReadKey();
        }
    }
}

Output: IT Department Average Salary = 24000

Let’s rewrite the previous example using the custom predicate. As you can see, within the Average method, we are checking the Department property value and if the Department is It, we are returning the corresponding Salary else we are returning null.

using System;
using System.Linq;
namespace LINQDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            //Using Method Syntax and Predicate
            var TotalSalaryMS = Employee.GetAllEmployees()
                              .Average(emp => {
                                  if (emp.Department == "IT")
                                      return emp.Salary;
                                  else
                                      return null;
                              });

            Console.WriteLine("IT Department Total Salary = " + TotalSalaryMS);

            Console.ReadKey();
        }
    }
}

Output: IT Department Average Salary = 24000

In the next article, I am going to discuss the LINQ Count Method in C# with Examples. I hope you understood the use and need of the LINQ Average Method in C# with Examples.

Leave a Reply

Your email address will not be published. Required fields are marked *