none
Retornar apenas os campos específicos em uma consulta linq RRS feed

  • Pergunta

  • Boa pessoal, Estou desenvolvendo uma aplicação e estou me beneficiando dos Generics para estas consultas. Todavia, surgiu a necessidade de retornar apenas alguns campos (e não todos) em uma determinada query. Observem meu codesnippet e notem que ela retorna todos os campos de uma consulta e não somente campos específicos:

    SistemaEscolarEntities escolar = new SistemaEscolarEntities();
    
    public IQueryable<T> selecionarPorParametro(Expression<Func<T, bool>> where)
    {
     return escolar.CreateObjectSet<T>().Where(where);
    }
    
    
    public IQueryable<T> selecionarTodos()
    {
     return escolar.CreateObjectSet<T>();
    }
    

    O que eu gostaria de fazer é algo assim:

     SistemaEscolarEntities escolar = new SistemaEscolarEntities();
                List<AlunoPesquisa> ls = new List<AlunoPesquisa>();
    
                var consulta = from p in escolar.Aluno
    
                                       where (p.nomeAluno.StartsWith(valor))
                                       select new { p.idAluno, p.matriculaAluno, p.nomeAluno };
    

    Porém preciso de algo genérico pois consultas assim se repetirão pelo sistema inteiro e ficar reescrevendo códigos repetidos, acaba violando um dos pilares da OO que é o reaproveitamento de código. Por isto tentei algo como no código abaixo, mas acabei não obtendo muito sucesso, pois quando pego a string e a jogo dentro de um var e tento percorrê-la, para verificar se já existe um registro ele entende que estou percorrendo uma string e não leva em consideração a consulta em si. Veja o trecho abaixo:

    public bool filtroTeste(string classe, string coluna, string valor)
            {
                int contador = 0;
                var valorConsulta = "from p in escolar." + classe + " where p." + coluna + ".equals(" + valor + ")" + " select " + coluna + ";";
                var query = valorConsulta;
                 
                foreach (var item in query)
                {
                    contador += 1;      
                }
    
                if (contador==0)
                {
                    return true;
                }
                else
                {
                    return false;
                }
    


    Alguém sabe como fazer para que este último trecho de código seja reconhecido como uma expressão de consulta e não como uma string? ou que os dois métodos com Generics que eu criei retornem campos específicos? pois as duas possibilidades me adiantam.

    Obrigado.

     

    segunda-feira, 19 de dezembro de 2011 01:11

Respostas

Todas as Respostas