C# List of objects, how do I get the sum of a property

ID : 20102

viewed : 14

Tags : c#listsumc#

Top 5 Answer for C# List of objects, how do I get the sum of a property

vote vote

91

using System.Linq; 

...

double total = myList.Sum(item => item.Amount); 
vote vote

80

And if you need to do it on items that match a specific condition...

double total = myList.Where(item => item.Name == "Eggs").Sum(item => item.Amount); 
vote vote

70

Another alternative:

myPlanetsList.Select(i => i.Moons).Sum(); 
vote vote

61

Here is example code you could run to make such test:

var f = 10000000; var p = new int[f];  for(int i = 0; i < f; ++i) {     p[i] = i % 2; }  var time = DateTime.Now; p.Sum(); Console.WriteLine(DateTime.Now - time);  int x = 0; time = DateTime.Now; foreach(var item in p){    x += item; } Console.WriteLine(DateTime.Now - time);  x = 0; time = DateTime.Now; for(int i = 0, j = f; i < j; ++i){    x += p[i]; } Console.WriteLine(DateTime.Now - time); 

The same example for complex object is:

void Main() {     var f = 10000000;     var p = new Test[f];      for(int i = 0; i < f; ++i)     {         p[i] = new Test();         p[i].Property = i % 2;     }      var time = DateTime.Now;     p.Sum(k => k.Property);     Console.WriteLine(DateTime.Now - time);      int x = 0;     time = DateTime.Now;     foreach(var item in p){         x += item.Property;     }     Console.WriteLine(DateTime.Now - time);      x = 0;     time = DateTime.Now;     for(int i = 0, j = f; i < j; ++i){         x += p[i].Property;     }     Console.WriteLine(DateTime.Now - time); }  class Test {     public int Property { get; set; } } 

My results with compiler optimizations off are:

00:00:00.0570370 : Sum() 00:00:00.0250180 : Foreach() 00:00:00.0430272 : For(...) 

and for second test are:

00:00:00.1450955 : Sum() 00:00:00.0650430 : Foreach() 00:00:00.0690510 : For() 

it looks like LINQ is generally slower than foreach(...) but what is weird for me is that foreach(...) appears to be faster than for loop.

vote vote

51

Top 3 video Explaining C# List of objects, how do I get the sum of a property

Related QUESTION?