如何清理此LINQ查询(SelectMany)?

时间:2010-09-04 15:02:20

标签: c# linq linq-to-objects

如何清理此LINQ查询以在sql语法中使用SelectMany,而不是像我那样使用方法链接?

 var runPeakWidths =
     (from ipa in runAnalysis.PassAnalyses
      let peakWidths = BuildPeakWidths(ipa)
      select peakWidths)
      .SelectMany(data => data);

编辑: 变成了一个紧凑的小方法:

    public void CreateRunStatistics(Func<IPassAnalysis, IEnumerable<double>> buildMethod, string name)
    {
        var data = runAnalysis.PassAnalyses.SelectMany(buildMethod);
        statistics.Add(StatisticsBase.Calc(name, data));
    }

谢谢!

2 个答案:

答案 0 :(得分:5)

var runPeakWidths = runAnalysis.PassAnalyses.SelectMany(ipa => BuildPeakWidths(ipa));

如果您愿意,也可以使用此功能:

var runPeakWidths = runAnalysis.PassAnalyses.SelectMany<Ipa, Pw>(BuildPeakWidths);

其中Ipaipa的类型 PwPeakWidth的类型。

我已经被可靠地告知(尚未验证自己)方法组的返回类型推断现在已在编译器中实现,因此这应该适用于C#4:

var runPeakWidths = runAnalysis.PassAnalyses.SelectMany(BuildPeakWidths);

答案 1 :(得分:4)

通过在查询中嵌套SelectMany子句可以避免from调用:

 var runPeakWidths =
      from ipa in runAnalysis.PassAnalyses
      from peakWidth in BuildPeakWidths(ipa)
      select peakWidth
相关问题