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ódigopublic 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á.