Ответ 1
По существу это a Select
(в большинстве случаев), который вводит прозрачный идентификатор - через анонимный тип, который инкапсулирует все текущие заданные переменные диапазона. Например, этот запрос:
string[] names = { "Jon", "Mark" };
var query = from name in names
let length = name.Length
where length > 3
select name + ": " + length;
преобразуется в нечто подобное:
var query = names.Select(name => new { name, length = name.Length })
.Where(z => z.length > 3)
.Select(z => z.name + ": " z.length);