Exemplo n.º 1
0
        static public List <string> GetFiltersWheres <TFilters>(TFilters Filters)
            where TFilters : new()
        {
            // TODO a way to exclude some Filters[something] from this mapping
            // TODO check if all filters are parsed
            // TODO check if Filters[something] is a prop of TEntity (otherwise skip/throw)

            List <string> filtersWheres = new();

            // TODO improve readability this "filter" is everywhere and is unclear what it means
            PropertyInfo[] filtersProperties = typeof(TFilters).GetProperties();
            foreach (var filterProperty in filtersProperties)
            {
                // Filters[prop] type LIST Filter<Int/String/Date>
                var singleFilterList = filterProperty.GetValue(Filters);

                // STRING FilterStringDto
                if (singleFilterList is List <FilterStringDto> stringFilters)
                {
                    foreach (var filterString in stringFilters)
                    {
                        var filter = new StringFilter
                        {
                            EntityProperty = filterProperty.Name,
                            Comparison     = filterString.Comparison,
                            Value          = filterString.Value,
                        };
                        filtersWheres.Add(filter.ToSql());
                    }
                }
                // INT FilterIntDto
                else if (singleFilterList is List <FilterIntDto> intFilters)
                {
                    foreach (var intFilter in intFilters)
                    {
                        var filter = new IntFilter
                        {
                            EntityProperty = filterProperty.Name,
                            Comparison     = intFilter.Comparison,
                            Value          = intFilter.Value,
                        };
                        filtersWheres.Add(filter.ToSql());
                    }
                }
                // DATE FilterDateDto
                else if (singleFilterList is List <FilteDateDto> dateFilters)
                {
                    foreach (var dateFilter in dateFilters)
                    {
                        var filter = new DateFilter
                        {
                            EntityProperty = filterProperty.Name,
                            Comparison     = dateFilter.Comparison,
                            Value          = dateFilter.Value,
                        };
                        filtersWheres.Add(filter.ToSql());
                    }
                }
            }

            return(filtersWheres);
        }