Example #1
0
        public static string FilterCondition <TEntity>(this DbCommand command, RelationalDbType relationalDbType, IEnumerable <SearchyCondition> conditions = null)
        {
            if (conditions == null)
            {
                return(string.Empty);
            }

            var where = string.Empty;
            int  index             = 0;
            bool validFiltersFound = false;

            foreach (var condition in conditions)
            {
                if (where == string.Empty)
                {
                    where = " WHERE (";
                }
                else
                {
                    where = $"{where} or ( ";
                }

                foreach (var filter in condition.Filters.Where(i => i.IsValid()))
                {
                    validFiltersFound = true;
                    index            += 1;
                    var filterColName         = ColumnAttribute.Get <TEntity>(filter.Field).ColumnNameEscaped(relationalDbType);
                    var filterColumnParameter = ColumnAttribute.Get <TEntity>(filter.Field).ColumnName;
                    var parameter             = command.AddParameter(filterColumnParameter + index.ToString());

                    switch (filter.Rule)
                    {
                    case SearchyRule.EqualsTo:
                        where           = $"{where} ({filterColName}={parameter.ParameterName}) AND ";
                        parameter.Value = filter.Value;
                        break;

                    case SearchyRule.LessThan:
                        where           = $"{where} ({filterColName}<{parameter.ParameterName}) AND ";
                        parameter.Value = filter.Value;
                        break;

                    case SearchyRule.LessThanOrEquals:
                        where           = $"{where} ({filterColName}<={parameter.ParameterName}) AND ";
                        parameter.Value = filter.Value;
                        break;

                    case SearchyRule.GreaterThan:
                        where           = $"{where} ({filterColName}>{parameter.ParameterName}) AND ";
                        parameter.Value = filter.Value;
                        break;

                    case SearchyRule.GreaterThanOrEquals:
                        where           = $"{where} ({filterColName}>={parameter.ParameterName}) AND ";
                        parameter.Value = filter.Value;
                        break;

                    case SearchyRule.NotEqualsTo:
                        where           = $"{where} ({filterColName}<>{parameter.ParameterName}) AND ";
                        parameter.Value = filter.Value;
                        break;

                    case SearchyRule.StartsWith:
                        where           = $"{where} ({filterColName} like {parameter.ParameterName}) AND ";
                        parameter.Value = string.Concat(filter.Value, "%");
                        break;

                    case SearchyRule.Contains:
                        where           = $"{where} ({filterColName} like {parameter.ParameterName}) AND ";
                        parameter.Value = string.Concat("%", filter.Value, "%");
                        break;

                        //case SearchyRule.EqualsToList:
                        //    {
                        //        var _ListType = _e.Value.GetType();
                        //        var _ItemType = _ListType.GetGenericArguments();
                        //        var _GenericListType = typeof(List<>);
                        //        var _GenericList = _GenericListType.MakeGenericType(_ItemType);

                        //        if (_GenericList != _ListType)
                        //            throw new Exception(string.Format("The value for the filter {0} is not a generic list", _filtercolname));

                        //        var _Values = new StringBuilder();
                        //        if (_ItemType.Contains(Type.GetType("System.String")) || _ItemType.Contains(Type.GetType("System.Guid")))
                        //        {
                        //            foreach (var _Value in _e.Value)
                        //                _Values.Append(string.Concat("'", _Value.ToString().Replace("'", "''"), "'", ","));
                        //        }
                        //        else
                        //            foreach (var _Value in _e.Value)
                        //                _Values.Append(string.Concat(_Value, ","));

                        //        _whereclause = string.Format(_whereclause + " ({0} IN ({1})) AND ", _filtercolname, _Values.ToString().TrimEnd(new char[] { ',' }));
                        //        break;
                        //    }
                    }
                }

                where = where.Remove(where.Length - 5);

                where = $"{where})";
            }

            return(validFiltersFound ? where : string.Empty);
        }
Example #2
0
 public string ColumnNameEscaped(RelationalDbType relationalDbType) =>
 relationalDbType == RelationalDbType.MySql  ? @$ "`{ColumnName}`" :  @$ "" "{ColumnName}" "";