Могу ли я иметь запрос LINQ, который подсчитывает общее количество строк, отфильтрованных с помощью where в свойстве?

#c# #asp.net #linq

#c# #asp.net #linq

Вопрос:

У меня есть массив, содержащий такие данные:

 var arr = 
[{count=0, instances=1},
 {count=1, instances=2},
 {count=3, instances=1},
 {count=4, instances=5},
 {count=5, instances=2}]
  

Возможно ли с помощью LINQ для меня создать запрос, который показывал бы общее количество экземпляров, если бы я должен был указать количество?

 So for example if I did a query with 1 it would give me 3 (from 1 2)
So for example if I did a query with 4 it would give me 9 (from
1 2 1 5)
  

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

1. Может ли столбец count иметь повторяющееся значение? например. {count=1, экземпляр = 2},{count=1, экземпляр= 5}

2. Нет, это невозможно

3. Проверьте мой ответ ниже, возможно, это поможет

Ответ №1:

 var countToTake; // 0 < countToTake <= arr.Length
var instanceCount = arr.Take(countToTake).Sum(item => item.instances)
  

РЕДАКТИРОВАТЬ: Смотрите комментарии

 var instanceCount = arr.Take(arr.IndexOf(item => item.count == countToTake)).Sum(item => item.instances)
  

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

1. Этот код не будет работать. Если countTOTake = 1 , то в вашем случае код примет только первое значение и просуммирует его, и результатом будет 1, при этом ожидаемый результат был равен 3

2. Вы не указали, должен ли код оценивать количество элементов в коллекции или свойство count. Таким образом, код, предоставленный Амни Каматом, больше подходит для ваших нужд. Также я обновил свой исходный пост.

Ответ №2:

 var sum = arr.Where(x => x.count <= maxCount).Select(x => x.instances).Sum();
  

Ответ №3:

Приведенный ниже код должен сработать.

 int selectedCount = 4 //hardcoded for illustration purpose, you will set this programatically
int sum = arr.Where(x => arr.IndexOf(x) <= (arr.FindIndex(i => i.count.Equals(selectedCount))))
             .Select(x => x.instances).Sum();