Функция Func() создает запрос который по идее должен выстраиваться в цепочку
names.Where( n => n.Contains( cc ) ).Where( n => n.Contains( cc ) ).Where( n => n.Contains( cc ) )
Но каким образом этот запрос может выполнится в теле Main, ведь в Main сс не определена, откуда он будет ее брать ?
Если посмотреть в отладчике то каждый foreach( c in q ) он прыгает в предикат n => n.Contains(cc) при этом в саму функцию Func() заходит только 1 раз перед циклом.
C предикатами вроде как понятно, они впринципе есть делегаты и могут жить отдельно от функции Func() , а cc вроде локальная переменная и к ней доступ извне получать по идее не должно быть возможно.
static IEnumerable<string> Func()
{
string[] names = { "Tom", "Dick", "Harry", "Mary", "Jay" };
var query = names.Select(n => n);
var cc = "a";
query = names.Where(n => n.Contains(cc));
cc = "r";
query = query.Where(n => n.Contains(cc));
cc = "y";
query = query.Where(n => n.Contains(cc));
return query;
}
static void Main(string[] args)
{
var q = Func();
foreach (var c in q)
{
Console.WriteLine(exp);
}
Console.ReadKey();
}