Это зависит от типа, если m_sources.
Если это контекст данных из LINQ to SQL или Entity Framework, передаваемый вами аргумент компилируется как экземпляр Expression и анализируется для создания SQL (с помощью модели данных). В этом процессе есть некоторые реальные затраты, но, вероятно, (в большинстве случаев) будет преобладать обратная поездка в базу данных.
Если это IEnumerable, то Where в значительной степени реализован как:
public static IEnumnerable<T> Where(this IEnumerable<T> input, Func<T, bool> predicate) {
foreach (var v in input) {
if (predicate(v)) {
yield return v;
}
}
}
Это довольно эффективно и работает лениво (поэтому, если вы рано выйдете из цикла, предикат не будет применен ко всей коллекции).