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

Como deixar a funcao extendida mais generica?

Fui tentar usar essa função de media em outra tabela mas deu erro, não encontra a campo Total usada na clausula do orderby

3 respostas

Olá, Maurici, você pode colar aqui o seu código, para podermos entender melhor o problema? Obrigado!

solução!

Olá Marcelo. Baixei o seu codigo fonte e vi onde estava o meu erro.

De qualquer forma agradeço a ajuda.

Muito Obrigado. E o seu treinamento está sendo bem proveitoso.

Codigo Errado:

public static decimal Mediana<TSource>(this IQueryable<TSource> origem, Expression<Func<TSource, decimal>> selector)
        {
            using (var contexto = new AluraTunesEntities())
            {
                int contagem = origem.Count();

                var funcSeletor = selector.Compile();
                var ordenado = contexto.NotasFiscais.Select(ag => ag.Total)
                    .OrderBy(total => total);

                var elementoCentral_1 = ordenado.Skip((contagem - 1) / 2).First();
                var elementoCentral_2 = ordenado.Skip(contagem / 2).First();

                decimal mediana = (elementoCentral_1 + elementoCentral_2) / 2;

                return mediana;
            }
        }

Codigo Correto:

        public static decimal Mediana<TSource>(this IQueryable<TSource> origem, Expression<Func<TSource, decimal>> selector)
        {
            int contagem = origem.Count();

            var funcSeletor = selector.Compile();
            var ordenado = origem
                .Select(selector)
                .OrderBy(x=> x);

            var elementoCentral_1 = ordenado.Skip((contagem - 1) / 2).First();
            var elementoCentral_2 = ordenado.Skip(contagem / 2).First();

            decimal mediana = (elementoCentral_1 + elementoCentral_2) / 2;

            return mediana;
        }

Muito bom, Maurici! E obrigado por prestigiar o nosso curso! ;-)