Array
(
)

Dificuldade em filtrar informações

Pjava
   - 01 out 2014

Sei que meu problema é lógica e isso deve partir de mim, eu sei, mas às vezes uma luz, não um código pronto, mas o apontar de um caminho nos ajuda bastante.
1) Tenho 6 ComboBox em minha View que fazem os filtros para uma pesquisa.
2) Essa pesquisa, deverá montar uns CheckBox's, baseado no filtro passado. Acontece que essa montagem dos checkbox's, a LINQ que trás o resultado é a minha model. Alguns me disseram aqui que passar parâmetro direto para a Model, quebra o paradigma da OO e concordo. Nesse momento começa meu problema.
3) Estou tendo dificuldade para fazer isso. Preencho os parâmetros na View e via JQuery eu os pego. Agora como eu faço para distribuir para a minha model, de forma que a LINQ seja executada com esses filtros sendo passados no where da LINQ ou Lambda. Abaixo minha Model.
#Código

public static List<MontaArvoreAcao> montaArvoreAcao( )
        {
            RupturaEntities db = new RupturaEntities();

            var monta_arvore = (from rup in db.Ruptura
                                join ap in db.Apresentacao on rup.Codigo_Apresentacao equals (ap.Codigo_Apresentacao)
                                join mo in db.Motivo on rup.IDMotivo equals (mo.IDMotivo)
                                join pdv in db.PDV on rup.CodigoPDV equals (pdv.CodigoPDV)

                                where rup.IDMotivo != 6

                                //group rup by new { rup.IDRuptura} into gr

                                select new MontaArvoreAcao
                                {
                                    IDRuptura = rup.IDRuptura,
                                    DataRuptura = rup.DataRuptura,
                                    IDMotivo = rup.IDMotivo,
                                    Motivo = rup.Motivo.Motivo1,
                                    IDOrigem = rup.IDOrigem,
                                    CodigoPDV = rup.CodigoPDV,
                                    UF = rup.PDV.UF,
                                    Cidade = pdv.Cidade,
                                    CnpjDescricao = pdv.Cnpj + " - " + pdv.Descricao,
                                    Codigo_Apresentacao = rup.Codigo_Apresentacao,
                                    Unidade_Negocio = ap.Unidade_Negocio,
                                    Codigo_Unidade_Negocio = ap.Codigo_Unidade_Negocio,
                                    Franquia = ap.Franquia,
                                    Familia = ap.Familia,
                                    Descricao = ap.Descricao,
                                    Tipo_Rede = pdv.Tipo_PDV,
                                    Farmacia = pdv.Descricao
                                }).ToList().OrderBy(r => r.IDMotivo);

            return monta_arvore.ToList();
        }

Os parâmetros vindo da View são:

Citação:
Estado, Cidade, Tipo_PDV, Descricao, UN, Familia de Produto.

Joel Rodrigues
   - 01 out 2014

Se entendi bem, você precisa passar parâmetros da view para o CONTROLLER (não para o MODEL). Se for isso, você deve fazer com Ajax. Teste utilizar o método $.ajax da jQuery, passando como parâmetro os valores coletados da view.

Pjava
   - 01 out 2014

Não, é para a Model. Preciso executar a LINQ ue está lá com os parâmetros passados, agora, para não infringir os paradigmas da OO, não sei como fazer isso. Da View para Controller já faço isso, exatamente com jquery e ajax.

Joel Rodrigues
   - 02 out 2014

Mas então, amigo, não é "os paradigmas da OO" e sim do modelo MVC.
Eu insisto que você não precisa fazer isso da forma como está pensando. Você DEVE passar os dados para o controller, que no modelo MVC é o responsável por tratar requisições do usuário e retornar algum resultado para a view. Você deve criar uma action para receber esses parâmetros, passá-los para o model e retornar um resultado.

Pjava
   - 02 out 2014

Alterei a minha Action para receber parâmetros, conforme vocês estão vendo. Como eu passo?

public ActionResult Acao(string _uf, string _cidade, string _descricao)
{
string user = System.Security.Principal.WindowsIdentity.GetCurrent().Name.Split('\\')[1].Trim();

ViewBag.User = user;

ViewData["ListaUn"] = MontaArvoreAcao.CriarListaArvoreUn(_uf,_cidade,_descricao);

ViewData["ListaFamilia"] = MontaArvoreAcao.CriarListaArvoreFamilia();

ViewData["ListaProd"] = MontaArvoreAcao.CriarListaArvoreProduto();

ViewData["ListaPdv"] = MontaArvoreAcao.CriarListaArvorePdv();

return View(MontaArvoreAcao.montaArvoreAcao());
}

Pjava
   - 02 out 2014

Lembrei-me que via jquery eu faço isso. Já está resolvido.

function.....

#Código

$.ajax({

    url: '/Controller/Action',

    ......

    data: JSON.stringify({ _uf: $('#cbxUf').val(), _cidade: $('#cbxCidade :selected').text(), _descricao:   $('#cbxDescricao :selected').text() }),

E assim por diante

})