Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Função Seletor

Bom dia! Poderia me ajudar entender melhor a função seletor, quando fazemos uma extensão de método?

var funcSeletor = selector.compiler();

2 respostas
solução!

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!