C # Lista de objetos, ¿cómo obtengo la sum de una propiedad?

Tengo una lista de objetos. Una propiedad de la entrada de objeto individual es la cantidad. ¿Cómo obtengo la sum de la cantidad?

Si mi lista era de tipo double, puedo hacer algo como esto:

double total = myList.Sum(); 

Sin embargo, quiero algo similar a esto, sin embargo, esta syntax es incorrecta.

 double total = myList.amount.Sum(); 

¿Cómo debo lograr esto? Me encantaría usar la función Sum si es posible en lugar de recorrer y calcular el valor.

     using System.Linq; 

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

    Y si necesita hacerlo en elementos que coinciden con una condición específica …

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

    Otra alternativa:

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

    Aquí hay un código de ejemplo que podría ejecutar para realizar dicha prueba:

     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); 

    El mismo ejemplo para objeto complejo es:

     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; } } 

    Mis resultados con las optimizaciones del comstackdor desactivadas son:

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

    y para la segunda prueba son:

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

    parece que LINQ es generalmente más lento que Foreach (...) pero lo que es extraño para mí es que foreach (...) parece ser más rápido que para el bucle.