private List <T> Filtrar <T>(FiltroOperadorCondicional filtro, IEnumerable <T> entidadeSet) { PropertyInfo info = typeof(T).GetProperty(filtro.Campo); return(entidadeSet .Select(item => new { value = item, prop = info.GetValue(item), }) .Where(item => filtro.ValorFiltro01 == null ? item.prop == null : item.prop != null && AplicarOperadorCondicional(filtro, item.prop.ToString())) .Select(item => item.value) .ToList()); }
private bool AplicarOperadorCondicional(FiltroOperadorCondicional filtro, string valorEntidade) { var valorFiltro = filtro.ValorFiltro01; var operador = filtro.OperadorCondicional; if (filtro.CampoData) { var dtInicio = DateTime.Parse(filtro.ValorFiltro01); var dtFinal = DateTime.Parse(filtro.ValorFiltro02); var dtEntidade = DateTime.Parse(valorEntidade); return(dtEntidade.Date >= dtInicio.Date && dtEntidade.Date <= dtFinal.Date); } if (!EhNumero(valorFiltro, valorEntidade) && operador != OperadorCondicional.IgualA && operador != OperadorCondicional.DiferenteDe) { return(false); } switch (operador) { case OperadorCondicional.IgualA: return(string.Equals(valorFiltro, valorEntidade)); case OperadorCondicional.DiferenteDe: return(!string.Equals(valorFiltro, valorEntidade)); case OperadorCondicional.MaiorOuIgualA: return(double.Parse(valorEntidade) >= double.Parse(valorFiltro)); case OperadorCondicional.MaiorQue: return(double.Parse(valorEntidade) > double.Parse(valorFiltro)); case OperadorCondicional.MenorOuIgualA: return(double.Parse(valorEntidade) <= double.Parse(valorFiltro)); case OperadorCondicional.MenorQue: return(double.Parse(valorEntidade) < double.Parse(valorFiltro)); } return(false); }