internal bool Valida(Anuncio anuncio) { bool res = true; object locket = new object(); Parallel.ForEach(Parametros, (filtro, loopState) => { bool fres = true; switch (filtro.Nome) { case "Preco": fres = anuncio.Preco != null ? filtro.Valida(anuncio.Preco.Value) : true; break; case "Area": fres = anuncio.Imovel.Area != null ? filtro.Valida(anuncio.Imovel.Area) : true; break; case "TipoImovel": fres = filtro.Valida(getTipoImovelDescendencia(anuncio.Imovel.Tipo)); break; case "TipoAnuncio": fres = filtro.Valida(anuncio.TipoAnuncio); break; case "Mediador": fres = filtro.Valida(anuncio.Mediador); break; case "Tipologia": fres = filtro.Valida(anuncio.Imovel.Tipologia); break; case "Localidade": fres = filtro.Valida(getRegiaoDescendencia(anuncio.Imovel.Local.Localidade)); break; default: break; } if (!fres) { loopState.Stop(); lock (locket) { res = false; } return; } }); return(res); }
public List <Anuncio> Filter(int[] _array) { int _tipo = _array[0], _estado = _array[1], _bairro = _array[2], _cidade = _array[3], _valorInicial = _array[4], _valorFinal = _array[5], _tipoAnuncio = _array[6]; try { DBConn db = new DBConn(); var ret = db.Enderecos.Join ( db.Anuncios, p => p.AnundioId, an => an.Id, (p, an) => new { p = p, an = an } ).Where (x => ( (x.an.Tipo == _tipo) && (x.an.Ativo == true) && (x.an.TipoAnuncio == (_tipoAnuncio == 0 ? x.an.TipoAnuncio : _tipoAnuncio)) && (x.p.EstadoId == (_estado == 0 ? x.p.EstadoId : _estado)) && (x.p.CidadeId == (_cidade == 0 ? x.p.CidadeId : _cidade)) && (x.p.BairroId == (_bairro == 0 ? x.p.BairroId : _bairro)) && (x.an.Valor >= (_valorInicial == 0 ? 0 : _valorInicial) && x.an.Valor <= (_valorFinal == 0 ? 90000000000 : _valorFinal)) ) ).OrderBy(x => x.an.Valor) .Select( w => new { Id = w.p.AnundioId, Titulo = w.an.Titulo, Descricao = w.an.Descricao, Suite = w.an.Suite, Vagas = w.an.Vagas, Valor = w.an.Valor, Dorms = w.an.Dorms, Area = w.an.Area, Imagens = w.an.Imagens } ).ToList(); List <Anuncio> _list = new List <Anuncio>(); ret.ForEach(c => { var item = new Anuncio() { Id = c.Id, Area = c.Area, Descricao = c.Descricao, Dorms = c.Dorms, Titulo = c.Titulo, Suite = c.Suite, Vagas = c.Vagas, Valor = c.Valor, Imagens = c.Imagens }; _list.Add(item); }); return(_list); } catch (Exception ex) { throw new Exception(ex.Message); } }