Итак, у меня довольно стандартный 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.