#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, при этом ожидаемый результат был равен 32. Вы не указали, должен ли код оценивать количество элементов в коллекции или свойство 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();