SelectMany - т.е.
IEnumerable<List<string>> someList = ...;
IEnumerable<string> all = someList.SelectMany(x => x);
Для каждого элемента в someList он использует лямбду "x => x", чтобы получить IEnumerable для внутренних элементов. В этом случае каждый «x» является списком , который уже IEnumerable .
Затем они возвращаются как непрерывный блок. По сути, SelectMany - это что-то вроде (упрощенно):
static IEnumerable<TResult> SelectMany<TSource, TResult>(
this IEnumerable<TSource> source,
Func<TSource, IEnumerable<TResult>> selector) {
foreach(TSource item in source) {
foreach(TResult result in selector(item)) {
yield return result;
}
}
}
Хотя это несколько упрощено.