【问题标题】:Aggregate using LINQ with Query Expression syntax使用带有查询表达式语法的 LINQ 进行聚合
【发布时间】:2011-02-11 00:17:29
【问题描述】:

编辑:我已经完全消灭了我最初的问题重新制定它是更直接的方式。我很抱歉,如果这是对任何礼仪,但我认为这将是更糟糕发布关于同一主题的一个新问题:) STRONG> P>

是否有可能写这个LINQ查询与查询综合通过实现自己的SelectMany或类似的语法: P>

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);

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

【问题讨论】:

  • 也许发布一个您想要编写的 LINQ 示例?
  • 抱歉问题不清楚。我现在已经更新了:)

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


【解决方案1】:

在我看来,因为 let 只是计算为对 Select 的调用,如果您实现 LINQ 样式的 Select 方法,这应该可以工作,类似于您已经实现的 SelectMany 方法,只是更简单。不过,我可能遗漏了一些东西。

【讨论】:

  • 感谢您的回答。我试过了,但问题是 Select() 中的转换函数只接受一个参数,因此我无法在聚合器中发送。现在聚合器就在那里,它只是包装在一个与我们想要返回的类型不同的匿名类型中。而且我看不出如何克服这种类型不匹配。
  • @asgerhallas:我不完全明白你希望它做什么。您能否详细说明您希望 let 在这种情况下的行为方式?
  • 抱歉问题不清楚。我已经提供了使用 let now 的详细信息和结果行为:)
猜你喜欢
  • 1970-01-01
  • 2016-07-29
  • 1970-01-01
  • 2012-04-30
  • 1970-01-01
  • 2019-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多