summaryrefslogtreecommitdiff
path: root/Decompiler/Gestor.Application.Helpers/CustomLinq.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Decompiler/Gestor.Application.Helpers/CustomLinq.cs')
-rw-r--r--Decompiler/Gestor.Application.Helpers/CustomLinq.cs55
1 files changed, 55 insertions, 0 deletions
diff --git a/Decompiler/Gestor.Application.Helpers/CustomLinq.cs b/Decompiler/Gestor.Application.Helpers/CustomLinq.cs
new file mode 100644
index 0000000..b07854b
--- /dev/null
+++ b/Decompiler/Gestor.Application.Helpers/CustomLinq.cs
@@ -0,0 +1,55 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Reflection;
+using Gestor.Common.Validation;
+using Gestor.Model.Domain.Relatorios;
+
+namespace Gestor.Application.Helpers;
+
+public static class CustomLinq
+{
+ public static List<T> CustomWhere<T>(this List<T> list, string propertyName, string query) where T : class
+ {
+ PropertyInfo pi = typeof(T).GetProperty(propertyName);
+ return list.Where((T x) => pi.GetValue(x).ToString().ToLower()
+ .Contains(query.ToLower())).ToList();
+ }
+
+ public static List<T> CustomWhere<T>(this List<T> list, List<FiltroPersonalizado> property, bool buscaIgual = false) where T : class
+ {
+ if (property == null || property.Count == 0)
+ {
+ return list;
+ }
+ return list.Where((T x) => (from p in property
+ group p by p.Propriedade).ToList().All((IGrouping<string, FiltroPersonalizado> p) => (!p.Any((FiltroPersonalizado s) => s.SemValor)) ? ((!(p.First().Tipo == typeof(DateTime))) ? ((!(p.First().Tipo == typeof(long))) ? ((!(p.First().Tipo == typeof(int))) ? ((!(p.First().Tipo == typeof(decimal))) ? ((!(p.First().Tipo == typeof(Enum))) ? p.Any(delegate(FiltroPersonalizado v)
+ {
+ if (!buscaIgual)
+ {
+ if (typeof(T).GetProperty(v.Propriedade)?.GetValue(x) != null)
+ {
+ return ValidationHelper.AlphanumericAndSpace(typeof(T).GetProperty(v.Propriedade).GetValue(x).ToString()
+ .ToLower()
+ .Trim()).Contains(ValidationHelper.AlphanumericAndSpace(v.ValorIncial.ToLower().Trim()));
+ }
+ return false;
+ }
+ return typeof(T).GetProperty(v.Propriedade)?.GetValue(x) != null && ValidationHelper.AlphanumericAndSpace(typeof(T).GetProperty(v.Propriedade).GetValue(x).ToString()
+ .ToLower()
+ .Trim()).Equals(ValidationHelper.AlphanumericAndSpace(v.ValorIncial.ToLower().Trim()));
+ }) : p.Any((FiltroPersonalizado v) => typeof(T).GetProperty(v.Propriedade)?.GetValue(x) != null && ValidationHelper.GetDescription((Enum)typeof(T).GetProperty(v.Propriedade).GetValue(x)).ToLower().Equals(v.ValorIncial.ToLower()))) : p.Any((FiltroPersonalizado v) => typeof(T).GetProperty(v.Propriedade)?.GetValue(x) != null && (decimal)typeof(T).GetProperty(v.Propriedade).GetValue(x) >= decimal.Parse(v.ValorIncial) && (decimal)typeof(T).GetProperty(v.Propriedade).GetValue(x) <= decimal.Parse(v.ValorFinal))) : p.Any((FiltroPersonalizado v) => typeof(T).GetProperty(v.Propriedade)?.GetValue(x) != null && (int)typeof(T).GetProperty(v.Propriedade).GetValue(x) >= int.Parse(v.ValorIncial) && (int)typeof(T).GetProperty(v.Propriedade).GetValue(x) <= int.Parse(v.ValorFinal))) : p.Any((FiltroPersonalizado v) => typeof(T).GetProperty(v.Propriedade)?.GetValue(x) != null && (long)typeof(T).GetProperty(v.Propriedade).GetValue(x) >= long.Parse(v.ValorIncial) && (long)typeof(T).GetProperty(v.Propriedade).GetValue(x) <= long.Parse(v.ValorFinal))) : p.Any((FiltroPersonalizado v) => typeof(T).GetProperty(v.Propriedade)?.GetValue(x) != null && (DateTime)typeof(T).GetProperty(v.Propriedade).GetValue(x) >= DateTime.Parse(v.ValorIncial) && (DateTime)typeof(T).GetProperty(v.Propriedade).GetValue(x) <= DateTime.Parse(v.ValorFinal).AddDays(1.0).AddSeconds(-1.0))) : p.Any((FiltroPersonalizado v) => typeof(T).GetProperty(v.Propriedade)?.GetValue(x) == null || string.IsNullOrWhiteSpace(typeof(T).GetProperty(v.Propriedade)?.GetValue(x).ToString()) || string.IsNullOrEmpty(typeof(T).GetProperty(v.Propriedade)?.GetValue(x).ToString())))).ToList();
+ }
+
+ public static List<T> CustomNot<T>(this List<T> list, List<FiltroPersonalizado> property) where T : class
+ {
+ if (property == null || property.Count == 0)
+ {
+ return list;
+ }
+ return list.Where((T x) => (from p in property
+ group p by p.Propriedade).ToList().All((IGrouping<string, FiltroPersonalizado> p) => (!p.Any((FiltroPersonalizado s) => s.SemValor)) ? ((!(p.First().Tipo == typeof(DateTime))) ? ((!(p.First().Tipo == typeof(long))) ? ((!(p.First().Tipo == typeof(int))) ? ((!(p.First().Tipo == typeof(decimal))) ? ((!(p.First().Tipo == typeof(Enum))) ? p.All((FiltroPersonalizado v) => typeof(T).GetProperty(v.Propriedade)?.GetValue(x) != null && !ValidationHelper.AlphanumericAndSpace(typeof(T).GetProperty(v.Propriedade).GetValue(x).ToString()
+ .ToLower()
+ .Trim()).Contains(ValidationHelper.AlphanumericAndSpace(v.ValorIncial.ToLower().Trim()))) : p.All((FiltroPersonalizado v) => typeof(T).GetProperty(v.Propriedade)?.GetValue(x) != null && !ValidationHelper.GetDescription((Enum)typeof(T).GetProperty(v.Propriedade).GetValue(x)).ToLower().Contains(v.ValorIncial.ToLower()))) : p.All((FiltroPersonalizado v) => typeof(T).GetProperty(v.Propriedade)?.GetValue(x) != null && (decimal)typeof(T).GetProperty(v.Propriedade).GetValue(x) != decimal.Parse(v.ValorIncial))) : p.All((FiltroPersonalizado v) => typeof(T).GetProperty(v.Propriedade)?.GetValue(x) != null && (int)typeof(T).GetProperty(v.Propriedade).GetValue(x) != int.Parse(v.ValorIncial))) : p.All((FiltroPersonalizado v) => typeof(T).GetProperty(v.Propriedade)?.GetValue(x) != null && (long)typeof(T).GetProperty(v.Propriedade).GetValue(x) != long.Parse(v.ValorIncial))) : p.All((FiltroPersonalizado v) => typeof(T).GetProperty(v.Propriedade)?.GetValue(x) != null && (DateTime)typeof(T).GetProperty(v.Propriedade).GetValue(x) != DateTime.Parse(v.ValorIncial))) : p.All((FiltroPersonalizado v) => typeof(T).GetProperty(v.Propriedade)?.GetValue(x) == null || string.IsNullOrWhiteSpace(typeof(T).GetProperty(v.Propriedade)?.GetValue(x).ToString())))).ToList();
+ }
+}