Array
(
)

Fazer filtro avançao em consultas linq

Pjava
   - 29 set 2014

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.
#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
                                    }).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
   - 29 set 2014

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:

#Código

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


Vou testar assim e ver o que dá.