Array
(
)

Dúvida em parametro de método

Pjava
   - 17 ago 2012

Preciso criar um método que me retorne uma lista e insira os valores em DataGridView. Bem isso eu já fiz e está funcionando. No meu sistema existe 3 tipos de pesquisa.
1) Geral
2) Por Id
3) Por Filtro
A terceira(Por filtro) é que está me tirando os cabelos(dos q restam). Assim: O objeto retornado, tem algumas propriedades e na pesquisa elas podem estar null, ou seja, digamos que eu tenha 5 propriedade que são 5 atributos de minha tabela do BD. A dúvida é eu criar um método que eu passe 1 ou 2 ou 3 ou 4 ou 5 ou quaisquer conbinações dessas 5 prop. Se eu faço um méto assim:
private.... meu_metodo(tipo1 param1,tipo2 param2,tipo3 param3,tipo 4 param4,tipo5 param5)
{}
E na pesquisa eu só preciso passar param3 e param 5, por exemplo, esse método estoura. Então, como eu faço isso?
Não sei se me fiz entender.

Pjava
   - 17 ago 2012

Vou dar o exemplo. As propriedades do objeto finder devem ser preenchida pelos parametros do método. Essa é minha dúvida: Como fazer.

private List<Entity.Skin> PesquisaFiltroSkin(Meus_Parâmetros_Aqui)
{
List<Entity.Skin> listaSkin = new List<Entity.Skin>();
Finder.Skin finder = new Finder.Skin();

finder.IdSkin = ?;
finder.IdProjeto = ?;
finder.Descricao = ?;
finder.DataInclusao = ?;
finder.DataAlteracao = ?;

listaSkin = Infrastructure.Repository.Skin.RetornarPorFiltro(finder);

return listaSkin;
}

Joel Rodrigues
   - 17 ago 2012

Você pode usar parâmetros opcionais. Veja um exemplo:
#Código

        public List<Pessoa> ListarClientes(string nome = null, int id = 0, string telefone = null)
        {
List<Pessoa> lista = new List<Pessoa>();
            if (nome != null)
            {
                //adicionar filtro por nome
            }
            if (id > 0)
            {
                //adicionar filtro por id
            }
            if (telefone != null)
            {
                //adicionar filtro por telefone
            }
            return lista;
        }


Porém, para você passar o segundo parâmetro, precisa passar o primeiro. Para passar o terceiro, precisa passar o segundo, etc.

Algumas chamadas possíveis:
#Código
Listar(); //nenhum parâmetro
Listar(´´fulano´´); //nome
Listar(´´fulano´´, 1);//nome + id
Listar(´´fulano´´, 1, ´´2222-2222´´);//nome + id + telefone


Caso você não queira usar um parâmetro, mas deseje passa um subsequente, pode passar para ele um valor padrão como null ou 0 (no caso).

Abraço.