2015-04-11 4 views
0

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

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

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

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

EDIT: Я понимаю. Возможно, лучше добавить числа в моем примере. Но мне бы очень хотелось узнать, как этот Aggregate будет выглядеть с запросом LINQ.

+0

Просто попробуйте это выяснить! –

+0

Это нечестно! Вы должны оставить комментарий к моему ответу, если ваши «требования» были изменены! –

ответ

1

Он уже является запросом LINQ, Aggregate является оператором LINQ, я предполагаю, что вы имели в виду, как это будет выглядеть в синтаксисе понимания LINQ? Синтаксис понимания состоит только из нескольких встроенных функций (select, where, multiple selects, groupby и т. Д.), У него нет всех операторов, встроенных, поэтому, когда вам нужен один из них (например, aggregate), вы обмениваете его вокруг parenthèses и сохраняете с регулярным синтаксисом. Поскольку нет ничего, кроме агрегировать это не представляется возможным, чтобы дать пример, так что я пойду с другим запросом:

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», нет ничего вам может делать с ним то, что вы не можете сделать с помощью простого использования операторов, но обратное неверно, поскольку не все операторы имеют встроенные замены. Единственное, что приходит на ум, когда всеобъемлющий синтаксис лучше (помимо личного вкуса), - это множественные выборки для создания декартова продукта, который гораздо сложнее поддерживать в синтаксисе простого метода.

0

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

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

или

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

OP добавил дополнительную информацию к вопросу, не сообщив мне об этом [EDIT].

Да, возможно преобразовать функцию Aggregate в запрос linq, но необходим метод расширения. См. Эту статью: Cumulating values with LINQ

 Смежные вопросы

  • Нет связанных вопросов^_^