Суммирование списка по одному свойству после фильтрации по другому свойству

#c# #.net #linq #where-clause

#c# #.net #linq #where-предложение

Вопрос:

У меня есть класс:

 class Cars 
{
   String Part;
   int NrOfParts;
}
  

и List<Cars> .

Я хотел бы получить sum of NrOfParts для определенного Part с помощью лямбда-выражений.

Я бы хотел что-то вроде этого:

  double sum = sil.Sum(item => item.NrOfParts WHERE item.Part == SomePart);
  

где sil мой список и SomePart какая конкретная часть, которую я ищу.

Проблема в том, что я не знаю, как добавить where условие, чтобы ограничить поиск для конкретного случая.

Ответ №1:

Сначала нужно поместить предложение where (используя метод where), а затем суммировать по отфильтрованному списку.

 double sum = sil.Where(i => i.Part == SomePart).Sum(i => i.NrOfParts);
  

Ответ №2:

Вы можете использовать это:

   double sum = sil.Where(item => item.Part == SomePart).Sum(item => item.NrOfParts);
  

Ответ №3:

попробуйте это: —

 double sum = Convert.ToDouble(sil.Where(item => item.Part == SomePart).Sum(item => item.NrOfParts));
  

Комментарии:

1. Sum вернет значение int (поскольку NrOfParts это int), и вам не нужно использовать Convert. ToDouble для перехода от int к double.

Ответ №4:

        //Your range will come here
        IEnumerable<double> d=Enumerable.Range(2.67,100);
       // Your condition
       d.Where(d1 => d1 % 2.0 == 0).CumulativeSum();

 public static class Extension

    {
        public static IEnumerable<double> CumulativeSum(this IEnumerable<double> sequence)
        {
            double sum = 0;
            foreach (var item in sequence)
            {
                sum  = item;
                yield return sum;
            }
        }

    }