summaryrefslogtreecommitdiff
path: root/Decompiler/Gestor.Application.Helpers/CustomLinq.cs
blob: b07854b6792e8cb9ee90d7ba43a110d95b82c0e2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
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();
	}
}