Fazer filtro avançao em consultas linq

29/09/2014

0

Tenho o seguinte cenário.
Na minha página, possuo 6 combobox. Todas tem na primeira linha da a palavra todos. O que eu quero é o seguinte. Se na combo estiver selecionado a palavra Todos, a minha linq deverá ignorar o where ou algo assim e trazer tudo. Caso tenha algo selecionado, então o where deverá considerar o filtro e trazer tudo considerando o filtro. As combos funcionam assim.

1) Combo UF => Quando seleciono a UF, a combo cidade é carregada, com a palavra todos no início(Index = 0).
2) Combo Tipo => Quando seleciono o tipo(Se é Rede ou Individual - Nome de Farmácia) aí é carregada a combo Descrição(Nome da Farmácia selecionada) com a palavra Todos.
4,5 e 6) São combos individuais, todas com a palavra Todos na primeira linha.

Abaixo minhas linq's, sem os filtros é claro, pois não sei como fazer. Cada lista dessa(linq) receberá um parâmetro, via jquery que será passado para as linq's e elas carregarem conforme os filtros.

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
                                    }).ToList().OrderBy(r => r.IDMotivo);
    
                return monta_arvore.ToList();
            }
    
            public static List<MontaArvoreAcao> CriarListaArvoreUn()
            {
                RupturaEntities db = new RupturaEntities();
    
                var _listaUnidade = (
                                       from r in db.Ruptura
                                       join a in db.Apresentacao on r.Codigo_Apresentacao equals (a.Codigo_Apresentacao)
                                       join m in db.Motivo on r.IDMotivo equals (m.IDMotivo)
                                       where r.IDMotivo != 6
                                       group r by new { a.Unidade_Negocio, r.IDMotivo } into gr
                                       select new MontaArvoreAcao
                                       {
                                           IDMotivo = gr.Key.IDMotivo,
                                           Unidade_Negocio = gr.Key.Unidade_Negocio,
                                           Somatorio = gr.Count()
                                       }
                                     ).Distinct().ToList().OrderBy(r => r.IDMotivo);
    
                return _listaUnidade.ToList();
            }
    
            public static List<MontaArvoreAcao> CriarListaArvoreFamilia()
            {
                RupturaEntities db = new RupturaEntities();
    
                var _listaFamilia = (
                                       from r in db.Ruptura
                                       join a in db.Apresentacao on r.Codigo_Apresentacao equals (a.Codigo_Apresentacao)
                                       join m in db.Motivo on r.IDMotivo equals (m.IDMotivo)
                                       where r.IDMotivo != 6
                                       group r by new { a.Familia, a.Unidade_Negocio, r.IDMotivo } into gr
                                       
                                       select new MontaArvoreAcao
                                       {
                                           Familia = gr.Key.Familia,
                                           IDMotivo = gr.Key.IDMotivo,
                                           Unidade_Negocio = gr.Key.Unidade_Negocio,
                                           Somatorio = gr.Count()
                                       }
                                     ).Distinct().ToList().OrderBy(r => r.Unidade_Negocio);
    
                return _listaFamilia.ToList();
            }
    
            public static List<MontaArvoreAcao> CriarListaArvoreProduto()
            {
                RupturaEntities db = new RupturaEntities();
    
                var _listaProd = (
                                       from r in db.Ruptura
                                       join a in db.Apresentacao on r.Codigo_Apresentacao equals (a.Codigo_Apresentacao)
                                       join m in db.Motivo on r.IDMotivo equals (m.IDMotivo)
                                       where r.IDMotivo != 6
                                       group r by new { a.Descricao, a.Familia, a.Unidade_Negocio, r.IDMotivo } into gr
    
                                       select new MontaArvoreAcao
                                       {
                                           Descricao = gr.Key.Descricao,
                                           Familia = gr.Key.Familia,
                                           IDMotivo = gr.Key.IDMotivo,
                                           Unidade_Negocio = gr.Key.Unidade_Negocio,
                                           Somatorio = gr.Count()
                                       }
                                     ).Distinct().ToList().OrderBy(r => r.Familia);
    
                return _listaProd.ToList();
            }
    
            public static List<MontaArvoreAcao> CriarListaArvorePdv()
            {
                RupturaEntities db = new RupturaEntities();
    
                var _listaPdv = (
                                       from r in db.Ruptura
                                       join a in db.Apresentacao on r.Codigo_Apresentacao equals (a.Codigo_Apresentacao)
                                       join m in db.Motivo on r.IDMotivo equals (m.IDMotivo)
                                       join p in db.PDV on r.CodigoPDV equals(p.CodigoPDV)
                                       where r.IDMotivo != 6
                                       group r by new { p.Cnpj, loja = p.Descricao, a.Descricao, a.Familia, a.Unidade_Negocio, r.IDMotivo, r.DataRuptura } into gr
    
                                       select new MontaArvoreAcao
                                       {
                                           CnpjDescricao = gr.Key.Cnpj + " - " + gr.Key.loja,
                                           Descricao = gr.Key.Descricao,
                                           DataRuptura = gr.Key.DataRuptura,
                                           Familia = gr.Key.Familia,
                                           IDMotivo = gr.Key.IDMotivo,
                                           Unidade_Negocio = gr.Key.Unidade_Negocio,
                                           Somatorio = gr.Count()
                                       }
                                     ).Distinct().ToList().OrderBy(r => r.Descricao);
    
                return _listaPdv.ToList();
            }
Pjava

Pjava

Responder

Posts

29/09/2014

Pjava

Pelo que vi em alguns exemplos, após carregar a minha variável, aí sim, venho fazendo if e recarregando de acordo com a condição, tipo:
Vamos pegar o listaPdv.

Depois de carregado, eu faria:

 if(alguma coisa)
    {
    listaPdv = listaPdv.Where(l =>.....)
    } 


Vou testar assim e ver o que dá.
Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar