Bom dia! Poderia me ajudar entender melhor a função seletor, quando fazemos uma extensão de método?
var funcSeletor = selector.compiler();
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!