# Aggregate Operators In LINQ

In this article we will discuss about the Aggregate Operators in LINQ. The Aggregate Operators in Linq allow us to perform simple math operations over the elements in a sequence. There are mainly six types of Set Operators in Linq.

## Aggregate Operators in Linq

### Introduction

In this article we will discuss about the Aggregate Operators in LINQ. The Aggregate Operators in Linq allow us to perform simple math operations over the elements in a sequence.

There are mainly six types of Set Operators in Linq.

1. Count - Count the elements in a sequence.
2. LongCount - Count the elements in a very, very long sequence.
3. Sum - Add the elements in a sequence
4. Min - Find the smallest element in a sequence.
5. Max - Find the largest element in a sequence.
6. Average - Find the average value in a sequence.

Now lets discuss all of them one by one.

1. Count
`public void CountFunction(){ int[] seq1 = { 1, 2, 3, 5, 4, 5, 2, 1 }; var count1 = seq1.Count(); Console.WriteLine("Count of seq1 is : " + count1); var count2 = "pa55w0rd".Count (c => char.IsDigit (c)); Console.WriteLine("Count with predicate is : " + count2)}OutputCount of seq1 is : 8Count with predicate is : 3`

The Count operator return the number of elements in a sequence. The return value is an integer.

2. LongCount
`public void LongCountFunction(){ int[] seq1 = { 258797878, 25447855, 14478454 }; var longCount = seq1.LongCount(); Console.WriteLine("Count of seq1 is : " + longCount);}OutputCount of seq1 is : 3`

The LongCount operator provides the same basic functionality as of Count, but allows you to work with an Int64. It Count the elements in a very, very long sequence. The key difference is that the result is a long, rather than a standard integer.

3. Sum
`public void SumFunction(){ int[] seq1 = { 1, 2, 3 }; var sum = seq1.Sum(); Console.WriteLine("Summation of the elements in array is : " + sum); string[] names = { "Tom", "Dick", "Harry", "Mary", "Jay" }; sum = names.Sum (s => s.Length); Console.WriteLine("Summation of the elements in string array is : " + sum);}OutputSummation of the elements in array is : 6Summation of the elements in string array is : 19`

The Sum method totals the values in a sequence. When used with a collection that contains only numeric values like in a "seq1", the method can be used with no arguments but if you are working with non numeric types like in "names" then the overload function comes into play which accepts a single parameter.

4. Min
`public void MinFunction(){ int[] seq1 = { 5, 2, 3 }; var minValues = seq1.Min(); Console.WriteLine("Minimum of an array is : "); }OutputMinimum of an array is : 2`

The Min() Function will find the smallest element in a sequence.

5. Max
`public void MaxFunction(){ int[] seq1 = { 3, 2, 5 }; var maxValues = seq1.Max(); Console.WriteLine("Maximum of an array is : "); }OutputMaximum of an array is : 5`

The Max() Function will find the largest element in a sequence.

6. Average
`public void IntersectFunction(){ int[] seq1 = { 1, 2, 3 }; var average = seq1.Average(); Console.WriteLine("Average of seq1 is : " + average);}OutputAverage of seq1 is : 2`

This operator finds the mean of the values in a sequence or we can say that it finds the average value in a sequence.

### Feedback

If you have any queries regarding Conversion Operators, please do ask me.

Author: Phagu Mahato11 Oct 2013 Member Level: Gold   Points : 1

Thank for useful article . An aggregate operator's main purpose is to return a single value; aggregate operators include Aggregate, Average, Count, LongCount, Max, Min and Sum.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;

namespace UsingLinqAggregateOperators
{
public partial class Form1 : Form
{

public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{

}

private void button1_Click(object sender, EventArgs e)
{
List InvDemo = new List();

{
Category = "Desktop Computer Accessories",
Product = "Keyboard",
Quantity = 200,
Order = 300
});

{
Category = " Accessories",
Product = " Speakers",
PtQuantity = 200,
Order = 100

});
{
Category = " Accessories",
Produc = " Speakers",
Quantity = 200,
Order = 100

});
{
Name = "Printers",
Product = "Wireless Printer",
Quantity = 200,
Order = 200

});

{
Category = "Printers",
Product = "Wireless Printer",
Quantity = 300,
Order = 500

});

var InventorySProcess = from p in InvDemo
group p by p.Product into g
let maxOrder = g.Max(p => p.Order)
select new {

Category = g.Key,

TotalUnitsInStock = g.Sum(p => p.Quantity),

TotalRequiredOrders = g.Sum(p => p.Order),

Difference = g.Sum(p => p.Quantity) - g.Sum(p => p.Order),
//Paying attention if we need to increase quantity to meet order
Attention = g.Sum(p => p.Quantity) < g.Sum(p => p.Order) ? true : false,

MaximumOrderQuantity = g.Max(p => p.Order),
MinimumOrderQuantity = g.Min(p => p.Order) };

dataGridView1.DataSource = InventorySProcess.ToList();

}
}

public class ProductAmount
{
public ProductAmount()
{
}

public string Category { get; set; }
public string Product { get; set; }
public int Quantity { get; set; }
public int Order { get; set; }

}

}

• Do not include your name, "with regards" etc in the comment. Write detailed comment, relevant to the topic.
• No HTML formatting and links to other web sites are allowed.
• This is a strictly moderated site. Absolutely no spam allowed.
• Name:
Email: