Bom dia! Poderia me ajudar entender melhor a função seletor, quando fazemos uma extensão de método?
var funcSeletor = selector.compiler();
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
Bom dia! Poderia me ajudar entender melhor a função seletor, quando fazemos uma extensão de método?
var funcSeletor = selector.compiler();
Olá, Ivanostik!
Um seletor é a expressão de uma consulta LINQ que seleciona o que será retornado na consulta. Por exemplo:
var innerJoinQuery =
from cust in customers
join dist in distributors on cust.City equals dist.City
select new { CustomerName = cust.Name, DistributorName = dist.Name };
Na consulta acima, o seletor é definido pelo objeto de tipo anônimo: new { CustomerName = cust.Name, DistributorName = dist.Name };.
Note que esse seletor ainda não é o objeto, mas somente a expressão que representa como o objeto deverá ser retornado (assim como uma receita de bolo não é o bolo, e sim a sua representação).
Dentro do método de extensão, quando precisamos acessar o objeto retornado pelo seletor, ainda não temos o objeto, nem a função, mas apenas a representação dessa função. Então devemos criar uma função dinamicamente - que não existe em lugar nenhum do nosso código - a partir da expressão do seletor. E como criamos uma função dinamicamente? Através da compilação da expressão do seletor. Quando o seletor é compilado, uma função é criada dinamicamente em memória, e é passada para a variável funcSelector. Em seguida, funcSeletor é passado como argumento para uma consulta LINQ dentro do seletor de uma outra consulta :
var queryOrdenada = source.Select(funcSelector).OrderBy(total => total);
Boa sorte e bons estudos!
Obrigado! Muito bom!