编辑:我已经完全消除了我的初步问题,以更直接的方式重新制定它。如果这违反任何礼仪,我很抱歉,但我认为在同一主题上发布一个新礼物会更糟糕:)
是否可以通过实现自己的SelectMany等来编写带有查询理解语法的LINQ查询:
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);
非常感谢任何帮助,提示,链接等!
答案 0 :(得分:0)
在我看来,因为let
只评估对Select
的调用,如果你实现LINQ风格的Select
方法,这应该有效,类似于{{1你已经实现的方法,只是更简单。不过,我可能会遗漏一些东西。