Получение результата по выражению Linq GroupBy в lambda-exp

Рейтинг: 1Ответов: 1Опубликовано: 21.04.2023
using MeetingCases;

List<int> ourList = new List<int> { 7, 8, 7, 5, 6, 5, 5, 7, 1, 3, 7, 3, 1, 4 };
var resultus = ourList.Skip(3).Take(4).Sum();
var yay = ourList.GroupBy(key =>
    {
        resultus += key;
        return key;
    }).Select(z => new {z.Key, resultus });
Console.WriteLine($"Result is {resultus}");
yay.ToList();

Console.WriteLine($"Result is {resultus}"); 

Не могли бы вы объяснить, почему в первом CW мы получаем результат 21, однако после yay.ToList(); получим 90.

Ответы

▲ 1Принят

Дело в том, что Linq запрос выполняется не при создании, а при материализации. В данном случае в строчке var yay = ourList.GroupBy(...).. он создается, а в строчке yay.ToList() запускается его материализация, то есть выполнение.

А в процессе выполнения запроса переменная resultus увеличивается

resultus += key;

В данном случае при группировке это суммирование выполняется для каждого числа в списке.

Console.WriteLine(string.Join(",", ourList));
Console.WriteLine(ourList.Sum());

Даст вывод

7,8,7,5,6,5,5,7,1,3,7,3,1,4
69

Получается

21 + 69 = 90