Можно ли преобразовать это агрегированное лямбда-выражение в запрос LINQ?

У меня есть список целых чисел, суммированных с помощью метода Aggregate с использованием лямбда-выражения:

var mylist = new int[] { 3, 4, 5 };

var result = mylist.Aggregate((a, b) => a + b);

Насколько я понимаю, лямбда-выражение всегда можно преобразовать в запрос LINQ. Как будет выглядеть такой запрос LINQ для моего примера?

РЕДАКТИРОВАТЬ: Я понимаю. Может быть, лучше добавить цифры в моем примере. Но мне бы очень хотелось узнать, как будет выглядеть этот агрегат с запросом LINQ.

2 ответа

Решение

Это уже запрос LINQ, Aggregate является оператором LINQ, я предполагаю, что вы имели в виду, как это будет выглядеть в синтаксисе понимания LINQ? Синтаксис понимания имеет только несколько встроенных функций (select, where, множественный выбор, groupby и т. Д.), В него не встроены все операторы, поэтому, когда вам нужен один из них (например, агрегат), вы оборачиваете его вокруг скобок и сохраняете происходит с обычным синтаксисом. Так как там нет ничего, кроме агрегата, невозможно привести пример, поэтому я пойду из другого запроса:

var mylist = new int[] { 3, 4, 5, 6, 7, 8 };

var result = mylist
    .Where(item=>item %2 == 0)
    .Aggregate((a, b) => a + b);

var ComprehensiveResult = 
    (from item in mylist
     where item % 2 == 0
     select item)
    .Aggregate((a, b) => a + b);

Комплексный синтаксис - это скорее "LINQ для людей, начинающих знакомство с SQL", в нем нет ничего, что вы не можете сделать с простым использованием операторов, но обратное неверно, поскольку не все операторы имеют встроенные замены. Единственное, что приходит на ум, когда комплексный синтаксис лучше (помимо личного вкуса), это множественный выбор для создания декартового произведения, которое гораздо сложнее поддерживать в простом синтаксисе метода.

В этом случае функция Aggregate добавляет числа друг к другу. Итак, эквивалентная функция SUM:

var qry = mylist.Sum(x=>x);

или же

var qry = (from n in mylist select n).Sum();

[РЕДАКТИРОВАТЬ]

ОП добавил дополнительную информацию к вопросу, не сообщая мне об этом.

Да, можно "конвертировать" Aggregate функция в запросе linq, но необходим метод расширения. Смотрите эту статью: Накопление значений с помощью LINQ

Другие вопросы по тегам