Получение результата по выражению Linq GroupBy в lambda-exp
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 шт):
Автор решения: aepot
→ Ссылка
Дело в том, что 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