Как я могу очистить этот LINQ Query (SelectMany)? - PullRequest
3 голосов
/ 04 сентября 2010

Как можно очистить этот запрос LINQ, чтобы использовать SelectMany в синтаксисе sql вместо цепочки методов в конце, как я это сделал?

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

Edit: Превратился в жесткий маленький метод:

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

Спасибо!

Ответы [ 2 ]

5 голосов
/ 04 сентября 2010
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);
4 голосов
/ 04 сентября 2010

Чтобы избежать вызова SelectMany, нужно вставить в запрос предложение from:

 var runPeakWidths =
      from ipa in runAnalysis.PassAnalyses
      from peakWidth in BuildPeakWidths(ipa)
      select peakWidth
...