public void listaNav( out IList <Categoria> Icategoria, out IList <FiltroOrder> IcategoriaFiltro) { #region LISTA CATEGORIAS //Funciona perfeitamente IList <Produto> produtos = lista(); Icategoria = (from a in produtos select a.categoria).ToList(); #endregion #region FILTRAR CATEGORIAS COM CONTAGEM var cFiltro = (from a in produtos group a by a.categoria into gd select new { Categoria = gd.Key, total = gd.Count() }).ToList(); List <FiltroOrder> Cat = new List <FiltroOrder>(); foreach (var gd in cFiltro) { FiltroOrder categoria = new FiltroOrder(); Categoria c = new Categoria(); c.id_categoria = gd.Categoria.id_categoria; c.nm_categoria = gd.Categoria.nm_categoria; categoria.categorias = c; categoria.total = Convert.ToInt32(gd.total); Cat.Add(categoria); } IcategoriaFiltro = Cat; #endregion }
public void ltProdutos(FiltroPesquisa pesq, out IList <Lista_Produtos2> IlistaProdutos, out IList <FiltroDesconto> IfiltroDesconto, out IList <FiltroPrecoProduto> IfiltroPrecoProduto, out IList <FiltroOrder> IfiltroOrder) { IList <String> IDesc = null; if (!String.IsNullOrEmpty(pesq.desc)) { IDesc = pesq.desc.Split(','); } IList <String> IPreco = null; if (!String.IsNullOrEmpty(pesq.preco)) { IPreco = pesq.preco.Split(','); } using (var dao = new EntidadeContext()) { #region LISTA DE PRODUTOS //Order estabelece tipo de categória que ele é. //Ex: categória, Subcategoria ou Subcategoria2. IList <Lista_Produtos2> lista = dao.Lista_Produtos2.ToList(); #endregion #region FILTRO CATEGÓRIA //if (pesq.busca != null) if (!String.IsNullOrEmpty(pesq.busca)) { List <Lista_Produtos2> linha = new List <Lista_Produtos2>(); foreach (var lt in lista) { bool item = Regex.IsMatch(lt.Titulo_produto.ToLower(), pesq.busca.ToLower()); if (item) { linha.Add(lt); } } lista = linha; } var FiltroCat = (from gd in lista select new { gd.id_categoria, gd.nm_categoria, gd.id_subcategoria, gd.nm_subcategoria, gd.id_subcategoria2, gd.nm_subcategoria2, }); List <FiltroOrder> filtroOrder = new List <FiltroOrder>(); foreach (var gd in FiltroCat) { FiltroOrder item = new Models.FiltraDados.FiltroOrder(); Categoria cat = new Categoria() { id_categoria = gd.id_categoria, nm_categoria = gd.nm_categoria }; Subcategoria subcat = new Subcategoria() { id_categoria = gd.id_categoria, id_subcategoria = gd.id_subcategoria, nm_subcategoria = gd.nm_subcategoria }; Subcategoria2 subcat2 = new Subcategoria2() { id_categoria = gd.id_categoria, id_subcategoria2 = gd.id_subcategoria2, nm_subcategoria2 = gd.nm_subcategoria2 }; item.categorias = cat; item.Subcategorias = subcat; item.Subcategorias2 = subcat2; filtroOrder.Add(item); } //OBS: O FINAL DESSE CÓDIGO SE ENCONTRA EM "FILTRO (PESQUISA DA PÁGINA)" #endregion #region FILTRO (PESQUISA DA PÁGINA) //OBS: A "order" representa a horientação entre a Categória, Subcategoria e Subcategoria2 // 1 = Categória, 2 = Subcategoria, 3 = Subcategoria2. List <FiltroOrder> itemOrder = new List <FiltroOrder>(); switch (pesq.or) { //E a todo categória. case 0: //Lista de produtos. IlistaProdutos = listaProdutosCheckList(lista, IDesc, IPreco); //Filtro de desconto. IfiltroDesconto = filtroDescReturno(lista); //Filtro preço produto. IfiltroPrecoProduto = FiltroPrProdutoRetorno(lista, IDesc); //Filtro categória. var cat = (from gd in filtroOrder.Where(p => p.categorias.id_categoria != 1) group gd by new { gd.categorias.id_categoria, gd.categorias.nm_categoria } into grd where (grd.Key.nm_categoria != null) select new { grd.Key.id_categoria, grd.Key.nm_categoria, total = grd.Count() }); foreach (var i in cat) { FiltroOrder ab = new FiltroOrder(); Categoria cat1 = new Categoria() { id_categoria = i.id_categoria, nm_categoria = i.nm_categoria }; ab.categorias = cat1; ab.total = i.total; //Número da próxima order para ser inserido no botão. ab.or = 1; itemOrder.Add(ab); } IfiltroOrder = itemOrder; break; //E a SubCategória. case 1: //Lista de produtos. IlistaProdutos = listaProdutosCheckList(lista.Where(list => list.id_categoria == pesq.id).ToList(), IDesc, IPreco); //Filtro de desconto. IfiltroDesconto = filtroDescReturno(lista.Where(list => list.id_categoria == pesq.id).ToList()); //Filtro preço produto. IfiltroPrecoProduto = FiltroPrProdutoRetorno(lista.Where(list => list.id_categoria == pesq.id).ToList(), IDesc); //Filtro categória. //IfiltroOrder = filtroOrder.Where(list => list.categorias.id_categoria == pesq.id).ToList(); var subCat = (from gd in filtroOrder.Where(p => p.Subcategorias.id_subcategoria != 1) group gd by new { gd.categorias.id_categoria, gd.Subcategorias.id_subcategoria, gd.Subcategorias.nm_subcategoria, } into grd where (grd.Key.nm_subcategoria != null && grd.Key.id_categoria == pesq.id) select new { grd.Key.id_subcategoria, grd.Key.nm_subcategoria, total = grd.Count() }); foreach (var i in subCat) { FiltroOrder ab = new FiltroOrder(); Subcategoria subCat1 = new Subcategoria() { id_subcategoria = i.id_subcategoria, nm_subcategoria = i.nm_subcategoria }; ab.Subcategorias = subCat1; ab.total = i.total; //Número da próxima order para ser inserido no botão. ab.or = pesq.or + 1; itemOrder.Add(ab); } IfiltroOrder = itemOrder; break; //E a Subcategoria2. case 2: //Lista de produtos. IlistaProdutos = listaProdutosCheckList(lista.Where(list => list.id_subcategoria == pesq.id).ToList(), IDesc, IPreco); //Filtro de desconto IfiltroDesconto = filtroDescReturno(lista.Where(list => list.id_subcategoria == pesq.id).ToList());; //Filtro preço produto. IfiltroPrecoProduto = FiltroPrProdutoRetorno(lista.Where(list => list.id_subcategoria == pesq.id).ToList(), IDesc); //Filtro categória. //IfiltroOrder = filtroOrder; var subCat2 = (from gd in filtroOrder.Where(p => p.Subcategorias.id_subcategoria != 1 && p.Subcategorias2.id_subcategoria2 != 1) group gd by new { gd.Subcategorias.id_subcategoria, gd.Subcategorias2.id_subcategoria2, gd.Subcategorias2.nm_subcategoria2 } into grd where (grd.Key.nm_subcategoria2 != null && grd.Key.id_subcategoria == pesq.id) select new { grd.Key.id_subcategoria2, grd.Key.nm_subcategoria2, total = grd.Count() }); foreach (var i in subCat2) { FiltroOrder ab = new FiltroOrder(); Subcategoria2 subCat2a = new Subcategoria2() { id_subcategoria2 = i.id_subcategoria2, nm_subcategoria2 = i.nm_subcategoria2 }; ab.Subcategorias2 = subCat2a; ab.total = i.total; //Número da próxima order para ser inserido no botão. ab.or = pesq.or + 1; itemOrder.Add(ab); } IfiltroOrder = itemOrder; break; default: //Lista de produtos. IlistaProdutos = null; //Filtro de desconto. IfiltroDesconto = null; //Filtro preço produto. IfiltroPrecoProduto = null; //Filtro Order. IfiltroOrder = null; break; } #endregion } }