public ConsultarObjetosResponse <T> ConsultarObjetos <T>(ConsultarObjetosRequest <T> parametros) where T : ICodigoEntidade { // Repassa a mensagem return(localizarHelper(typeof(T)).Instancia.ConsultarObjetos <T>(parametros)); }
/// <summary> /// Lista os objetos do tipo informado que obedecem às condições. /// </summary> /// <typeparam name="T"></typeparam> /// <param name="condicoes"></param> /// <returns></returns> public ConsultarObjetosResponse <T> ConsultarObjetos <T>(ConsultarObjetosRequest <T> parametros) where T : ICodigoEntidade { // Permite que o hook interfira no processamento if (this.EventoConsultar != null) { // Cria eventargs para permitir que o hook crie sua resposta PersistenciaArquivoEventoEventArgs eventArgs = new PersistenciaArquivoEventoEventArgs() { MensagemRequest = parametros }; // Faz a chamada do hook this.EventoConsultar(this, eventArgs); // Se tem resposta, é a que deve ser retornada if (eventArgs.MensagemResponse != null) { return(eventArgs.MensagemResponse as ConsultarObjetosResponse <T>); } } // Lista todas as entidades do tipo informado IEnumerable <EntidadeInfo> entidadesInfo = from e in _persistenciaHelper.Entidades where e.Value.TipoObjeto == typeof(T).FullName select e.Value; // Inicializa ConsultarObjetosResponse <T> retorno = new ConsultarObjetosResponse <T>(); retorno.Resultado = desserializar <T>(entidadesInfo); // Faz os filtros foreach (CondicaoInfo condicao in parametros.Condicoes) { // Faz o filtro retorno.Resultado = retorno.Resultado.Where <T>( delegate(T obj) { // Inicializa bool retorno2 = false; // Pega o valor da propriedade PropertyInfo ppInfo = typeof(T).GetProperty(condicao.Propriedade); Type tipoValor = ppInfo.PropertyType; object valor = ppInfo.GetValue(obj, null); // Testa a condicao switch (condicao.TipoCondicao) { case CondicaoTipoEnum.Igual: if (valor != null) { retorno2 = valor.Equals(condicao.Valores[0]); } else { retorno2 = valor == condicao.Valores[0]; } break; case CondicaoTipoEnum.Diferente: if (valor != null) { retorno2 = !valor.Equals(condicao.Valores[0]); } else { retorno2 = !(valor == condicao.Valores[0]); } break; case CondicaoTipoEnum.Maior: if (valor != null) { retorno2 = ((IComparable)valor).CompareTo(Convert.ChangeType(condicao.Valores[0], tipoValor)) > 0; } break; case CondicaoTipoEnum.MaiorIgual: if (valor != null) { retorno2 = ((IComparable)valor).CompareTo(Convert.ChangeType(condicao.Valores[0], tipoValor)) >= 0; } break; case CondicaoTipoEnum.Menor: if (valor != null) { retorno2 = ((IComparable)valor).CompareTo(Convert.ChangeType(condicao.Valores[0], tipoValor)) < 0; } break; case CondicaoTipoEnum.MenorIgual: if (valor != null) { retorno2 = ((IComparable)valor).CompareTo(Convert.ChangeType(condicao.Valores[0], tipoValor)) <= 0; } break; } // Retorna return(retorno2); }).ToList <T>(); } // Retorna return(retorno); }