Оптимизация OrderBy () при использовании Any ()

Итак, у меня довольно стандартный LINQ- to-Object setup.

var query = expensiveSrc.Where(x=> x.HasFoo)
                        .OrderBy(y => y.Bar.Count())
                        .Select(z => z.FrobberName);    

// ...

if (!condition && !query.Any())
 return; // seems to enumerate and sort entire enumerable 

// ...

foreach (var item in query)
   // ...

Это перечисляет все дважды. Что плохо.

var queryFiltered = expensiveSrc.Where(x=> x.HasFoo);

var query = queryFiltered.OrderBy(y => y.Bar.Count())
                         .Select(z => z.FrobberName); 

if (!condition && !queryFiltered.Any())
   return;

// ...

foreach (var item in query)
   // ...

Работает, но есть ли лучший способ?

Есть ли какой-нибудь безумный способ "просветить" Any (), чтобы обойти необязательные операции? Думаю, я помню такую ​​оптимизацию в EduLinq.

6
задан Fowl 6 July 2012 в 04:45
поделиться