Я понимаю, что этот поток очень старый, но так как я только что пробежался по этому синтаксису, я решил опубликовать свои дополнительные выводы - вы можете вернуть сумму и идентификаторы (без foreach) в одном запросе, например так:
var sums = Orders
.GroupBy(x => new { x.CustomerID, x.ProductID })
.Select(group =>new {group.Key, ProductCount = group.Sum(x => x.ProductCount)});
Самое сложное для меня, чтобы заставить его работать, это то, что сумма должна быть псевдонимом, по-видимому ...