Агрегирование с использованием LINQ с синтаксисом выражения запроса - PullRequest
1 голос
/ 11 февраля 2011

РЕДАКТИРОВАТЬ: я полностью уничтожил мой первоначальный вопрос, чтобы переформулировать его так, чтобы это было более прямо вперед. Прошу прощения, если это против какого-либо этикета, но я подумал, что будет еще хуже опубликовать новый по той же теме:)

Можно ли написать этот LINQ-запрос с синтаксисом понимания запроса, реализовав собственную программу SelectMany или подобное:

var enumerable = 
    Enumerable.Range(1, 10)
              .Aggregate(new SomeAggregation(),
                         (c, n) =>
                         {
                             var l = c.SomeOperation(); // expensive operation
                             return c.UseIt(l).UseItAgain(l); // the result is needed multiple times
                         });

Я думаю о чем-то вроде:

var enumerable = from c in new SomeAggregation().AsSeed()
                 from n in Enumerable.Range(1, 10)
                 from l in c.SomeOperation()
                 select c.UseIt(l).UseItAgain(l);

Или:

var enumerable = from c in new SomeAggregation().AsSeed()
                 from n in Enumerable.Range(1, 10)
                 let l = c.SomeOperation()
                 select c.UseIt(l).UseItAgain(l);

Любая помощь, советы, ссылки или тому подобное высоко ценится!

1 Ответ

0 голосов
/ 11 февраля 2011

Мне кажется, поскольку let просто оценивает вызов Select, это должно сработать, если вы реализуете метод Select в стиле LINQ, аналогично методу * 1004, который вы уже реализовали, только проще. Возможно, я что-то упускаю.

...