Ответ 1
Продолжения запросов (select... into и group... into, но не join... in) эквивалентны простому расщеплению выражения запроса. Поэтому мне нравится думать о вашем примере как:
var tmp = from x in myCollection
group x by x.Id;
var result = from y in tmp
select new {
Id = y.Key,
Quantity = y.Sum(x => x.Quantity)
};
Измените их на точечную нотацию:
var tmp = myCollection.GroupBy(x => x.Id);
var result = tmp.Select(y => new {
Id = y.Key,
Quantity = y.Sum(x => x.Quantity)
});
Затем вы можете объединить их:
var tmp = myCollection.GroupBy(x => x.Id)
.Select(y => new {
Id = y.Key,
Quantity = y.Sum(x => x.Quantity)
});
Как только вы выясните, что делает компилятор С# с выражениями запроса, остальное относительно просто:)