Перешел через этот код.
var dic = new Dictionary<int, string>();
for(int i=0; i<20000; i++)
{
dic.Add(i, i.ToString());
}
var list = dic.Where(f => f.Value.StartsWith("1")).Select(f => f.Key);//.ToList(); //uncomment for fast results
Console.WriteLine(list.GetType());
var list2 = dic.Where(f => list.Contains(f.Key)).ToList();
Console.WriteLine(list2.Count())
Итак, когда .ToList() прокомментирует это медленно, а не - быстро. Воспроизводимый здесь Как это можно объяснить? Должен ли я всегда делать все ToList() для обеспечения скорости (т.е. В каких обстоятельствах IEnumerable был бы более предпочтительным)? Заметьте, что я говорю только о linq для объектов, я знаю linq для sql лень и т.д.