Usuário com melhor resposta
Duvidas sobre métodos na Camada de negócio

Pergunta
-
Salve galera,
Nos meus projetos eu crio as classes de entidades e a classe de negócio, na minha classe de negócio eu crio métodos tais como
Public List<clsCliente> GetAll();
Public List<clsCliente> GetAllByCidade(clsCidade objCidade);
ate aqui tudo bem, sem problemas pra kd método eu faço a conexão com a camada de dados, busco os dados ETC.
Hoje estáva olhando um projeto de um amigo, e me deparei com uma técnica que torna isto bem + prático no método GetAllByCidade ele codificou desta forma
return GetAll().Where(c => c.Cidade = objCidade).ToList();
Minha duvida é: A praticidade de se criar os métodos com base em + genérico via LINQ vale a pena se for levar em conta a performance?
1000ton - MSN: milton.filho@msn.com
Respostas
-
Milton,
Discordo com os amigos, olhando o trecho de código que você postou vejo claramente onde está o problema, você não deveria estar retornando um List<> e sim um IQueryable<T>.
Public List<clsCliente> GetAll();
return GetAll().Where(c => c.Cidade = objCidade).ToList(); <-- desta forma você carrega uma List<clsCliente > em memória e utiliza o .Where(c => c.Cidade = objCidade) para fazer um filtro, porem você trouxe todos os registros do banco de dados para a memória e filtrou em memória.
Em outra palavras a interface genérica IQueryable<> faz com que você somente traga os dados depois de montar todo o SQL que será executado no banco.
Public IQueryable <clsCliente> GetAll();
return GetAll().Where(c => c.Cidade = objCidade).ToList() <-- agora ele vai ao banco e traz somente as cidades atenderem a condição.
Wilson Vernay MCP MCAD MCSD- Sugerido como Resposta Vernay segunda-feira, 26 de abril de 2010 18:33
- Marcado como Resposta MiltonFilho terça-feira, 27 de abril de 2010 02:22
Todas as Respostas
-
-
-
-
Milton,
Discordo com os amigos, olhando o trecho de código que você postou vejo claramente onde está o problema, você não deveria estar retornando um List<> e sim um IQueryable<T>.
Public List<clsCliente> GetAll();
return GetAll().Where(c => c.Cidade = objCidade).ToList(); <-- desta forma você carrega uma List<clsCliente > em memória e utiliza o .Where(c => c.Cidade = objCidade) para fazer um filtro, porem você trouxe todos os registros do banco de dados para a memória e filtrou em memória.
Em outra palavras a interface genérica IQueryable<> faz com que você somente traga os dados depois de montar todo o SQL que será executado no banco.
Public IQueryable <clsCliente> GetAll();
return GetAll().Where(c => c.Cidade = objCidade).ToList() <-- agora ele vai ao banco e traz somente as cidades atenderem a condição.
Wilson Vernay MCP MCAD MCSD- Sugerido como Resposta Vernay segunda-feira, 26 de abril de 2010 18:33
- Marcado como Resposta MiltonFilho terça-feira, 27 de abril de 2010 02:22
-