如何清理此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));
}
谢谢!
答案 0 :(得分:5)
var runPeakWidths = runAnalysis.PassAnalyses.SelectMany(ipa => BuildPeakWidths(ipa));
如果您愿意,也可以使用此功能:
var runPeakWidths = runAnalysis.PassAnalyses.SelectMany<Ipa, Pw>(BuildPeakWidths);
其中Ipa
是ipa
的类型
Pw
是PeakWidth
的类型。
我已经被可靠地告知(尚未验证自己)方法组的返回类型推断现在已在编译器中实现,因此这应该适用于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