使用LINQ和Query Expression语法进行聚合

时间:2011-02-11 00:17:29

标签: c# .net linq linq-to-objects

编辑:我已经完全消除了我的初步问题,以更直接的方式重新制定它。如果这违反任何礼仪,我很抱歉,但我认为在同一主题上发布一个新礼物会更糟糕:)

是否可以通过实现自己的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);

非常感谢任何帮助,提示,链接等!

1 个答案:

答案 0 :(得分:0)

在我看来,因为let只评估对Select的调用,如果你实现LINQ风格的Select方法,这应该有效,类似于{{1你已经实现的方法,只是更简单。不过,我可能会遗漏一些东西。