예제 #1
0
        public virtual void AppendFilter()
        {
            if (!IsDisabledGobalFilter && this.Context.QueryFilter.GeFilterList.HasValue())
            {
                var gobalFilterList = this.Context.QueryFilter.GeFilterList.Where(it => it.FilterName.IsNullOrEmpty()).ToList();

                foreach (var item in gobalFilterList)
                {
                    if (item.GetType().Name.StartsWith("TableFilterItem"))
                    {
                        AppendTableFilter(item);
                    }
                }
                foreach (var item in gobalFilterList.Where(it => it.GetType().Name == "SqlFilterItem").Where(it => it.IsJoinQuery == !IsSingle()))
                {
                    var filterResult = item.FilterValue(this.Context);
                    WhereInfos.Add(this.Builder.AppendWhereOrAnd(this.WhereInfos.IsNullOrEmpty(), filterResult.Sql + UtilConstants.Space));
                    var filterParamters = this.Context.Ado.GetParameters(filterResult.Parameters);
                    if (filterParamters.HasValue())
                    {
                        this.Parameters.AddRange(filterParamters);
                    }
                }
            }
        }
예제 #2
0
        public virtual string ToSqlString()
        {
            string oldOrderBy      = this.OrderByValue;
            string externalOrderBy = oldOrderBy;

            if (!IsDisabledGobalFilter && this.Context.QueryFilter.GeFilterList.IsValuable())
            {
                var gobalFilterList = this.Context.QueryFilter.GeFilterList.Where(it => it.FilterName.IsNullOrEmpty()).ToList();
                foreach (var item in gobalFilterList.Where(it => it.IsJoinQuery == !IsSingle()))
                {
                    var filterResult = item.FilterValue(this.Context);
                    WhereInfos.Add(this.Builder.AppendWhereOrAnd(this.WhereInfos.IsNullOrEmpty(), filterResult.Sql));
                    var filterParamters = this.Context.Ado.GetParameters(filterResult.Parameters);
                    if (filterParamters.IsValuable())
                    {
                        this.Parameters.AddRange(filterParamters);
                    }
                }
            }
            sql = new StringBuilder();
            if (this.OrderByValue == null && (Skip != null || Take != null))
            {
                this.OrderByValue = " ORDER BY GetDate() ";
            }
            if (this.PartitionByValue.IsValuable())
            {
                this.OrderByValue = this.PartitionByValue + this.OrderByValue;
            }
            var isRowNumber     = Skip != null || Take != null;
            var rowNumberString = string.Format(",ROW_NUMBER() OVER({0}) AS RowIndex ", GetOrderByString);

            sql.AppendFormat(SqlTemplate, GetSelectValue, GetTableNameString, GetWhereValueString, GetGroupByString + HavingInfos, (!isRowNumber && this.OrderByValue.IsValuable()) ? GetOrderByString : null);
            sql.Replace("{$:OrderByString:$}", isRowNumber ? (this.IsCount ? null : rowNumberString) : null);
            if (IsCount)
            {
                return(sql.ToString());
            }
            var result = ToPageSql(sql.ToString(), this.Take, this.Skip);

            if (ExternalPageIndex > 0)
            {
                if (externalOrderBy.IsNullOrEmpty())
                {
                    externalOrderBy = " ORDER BY GetDate() ";
                }
                result = string.Format("SELECT *,ROW_NUMBER() OVER({0}) AS RowIndex2 FROM ({1}) ExternalTable ", GetExternalOrderBy(externalOrderBy), result);
                result = ToPageSql2(result, ExternalPageIndex, ExternalPageSize, true);
            }
            this.OrderByValue = oldOrderBy;
            return(result);
        }
예제 #3
0
 public virtual void AppendFilter()
 {
     if (!IsDisabledGobalFilter && this.Context.QueryFilter.GeFilterList.IsValuable())
     {
         var gobalFilterList = this.Context.QueryFilter.GeFilterList.Where(it => it.FilterName.IsNullOrEmpty()).ToList();
         foreach (var item in gobalFilterList.Where(it => it.IsJoinQuery == !IsSingle()))
         {
             var filterResult = item.FilterValue(this.Context);
             WhereInfos.Add(this.Builder.AppendWhereOrAnd(this.WhereInfos.IsNullOrEmpty(), filterResult.Sql));
             var filterParamters = this.Context.Ado.GetParameters(filterResult.Parameters);
             if (filterParamters.IsValuable())
             {
                 this.Parameters.AddRange(filterParamters);
             }
         }
     }
 }
예제 #4
0
        private void AppendTableFilter(SqlFilterItem item)
        {
            BindingFlags flag       = BindingFlags.Instance | BindingFlags.NonPublic;
            Type         type       = item.GetType();
            PropertyInfo field      = type.GetProperty("exp", flag);
            Type         ChildType  = type.GetProperty("type", flag).GetValue(item, null) as Type;
            var          entityInfo = this.Context.EntityMaintenance.GetEntityInfo(ChildType);
            var          exp        = field.GetValue(item, null) as Expression;
            var          isMain     = ChildType == this.EntityType;
            var          isSingle   = IsSingle();
            var          itName     = (exp as LambdaExpression).Parameters[0].Name;

            itName = this.Builder.GetTranslationColumnName(itName) + ".";
            var isEasyJoin = this.EasyJoinInfos.Count > 0;

            string sql = "";

            if (isSingle)
            {
                if (ChildType != this.EntityType && isSingle)
                {
                    return;
                }
                sql = GetSql(exp, isSingle);
            }
            else if (isMain)
            {
                if (TableShortName == null)
                {
                    return;
                }
                var shortName = this.Builder.GetTranslationColumnName(TableShortName) + ".";
                sql = GetSql(exp, isSingle);
                sql = sql.Replace(itName, shortName);
            }
            else if (isEasyJoin)
            {
                var easyInfo = EasyJoinInfos.FirstOrDefault(it =>
                                                            it.Value.Equals(entityInfo.DbTableName, StringComparison.CurrentCultureIgnoreCase) ||
                                                            it.Value.Equals(entityInfo.EntityName, StringComparison.CurrentCultureIgnoreCase));
                if (easyInfo.Key == null)
                {
                    return;
                }
                var shortName = this.Builder.GetTranslationColumnName(easyInfo.Key.Trim()) + ".";
                sql = GetSql(exp, isSingle);
                sql = sql.Replace(itName, shortName);
            }
            else
            {
                var easyInfo = JoinQueryInfos.FirstOrDefault(it =>
                                                             it.TableName.Equals(entityInfo.DbTableName, StringComparison.CurrentCultureIgnoreCase) ||
                                                             it.TableName.Equals(entityInfo.EntityName, StringComparison.CurrentCultureIgnoreCase));
                if (easyInfo == null)
                {
                    return;
                }
                var shortName = this.Builder.GetTranslationColumnName(easyInfo.ShortName.Trim()) + ".";
                sql = GetSql(exp, isSingle);
                sql = sql.Replace(itName, shortName);
            }
            if (item.IsJoinQuery == false || isMain || isSingle || isEasyJoin)
            {
                WhereInfos.Add(sql);
            }
            else
            {
                foreach (var joinInfo in this.JoinQueryInfos)
                {
                    if (joinInfo.TableName.EqualCase(entityInfo.EntityName) || joinInfo.TableName.EqualCase(entityInfo.DbTableName))
                    {
                        if (sql.StartsWith(" WHERE "))
                        {
                            sql = Regex.Replace(sql, $"^ WHERE ", " AND ");
                        }
                        joinInfo.JoinWhere = joinInfo.JoinWhere + sql;
                    }
                }
            }
        }
예제 #5
0
        private void AppendTableFilter(SqlFilterItem item)
        {
            BindingFlags flag       = BindingFlags.Instance | BindingFlags.NonPublic;
            Type         type       = item.GetType();
            PropertyInfo field      = type.GetProperty("exp", flag);
            Type         ChildType  = type.GetProperty("type", flag).GetValue(item, null) as Type;
            var          entityInfo = this.Context.EntityMaintenance.GetEntityInfo(ChildType);
            var          exp        = field.GetValue(item, null) as Expression;
            var          isMain     = ChildType == this.EntityType;
            var          isSingle   = IsSingle();
            var          expValue   = GetExpressionValue(exp, isSingle ? ResolveExpressType.WhereSingle : ResolveExpressType.WhereMultiple);
            var          sql        = expValue.GetResultString();
            var          itName     = (exp as LambdaExpression).Parameters[0].Name;

            itName = this.Builder.GetTranslationColumnName(itName) + ".";
            var isEasyJoin = this.EasyJoinInfos.Count > 0;

            if (WhereInfos.Count == 0)
            {
                sql = (" WHERE " + sql);
            }
            else
            {
                sql = (" AND " + sql);
            }
            if (isSingle)
            {
                if (ChildType != this.EntityType)
                {
                    return;
                }
            }
            else if (isMain)
            {
                var shortName = this.Builder.GetTranslationColumnName(TableShortName) + ".";
                sql = sql.Replace(itName, shortName);
            }
            else if (isEasyJoin)
            {
                var easyInfo = EasyJoinInfos.FirstOrDefault(it =>
                                                            it.Value.Equals(entityInfo.DbTableName, StringComparison.CurrentCultureIgnoreCase) ||
                                                            it.Value.Equals(entityInfo.EntityName, StringComparison.CurrentCultureIgnoreCase));
                if (easyInfo.Key == null)
                {
                    return;
                }
                var shortName = this.Builder.GetTranslationColumnName(easyInfo.Key.Trim()) + ".";
                sql = sql.Replace(itName, shortName);
            }
            else
            {
                var easyInfo = JoinQueryInfos.FirstOrDefault(it =>
                                                             it.TableName.Equals(entityInfo.DbTableName, StringComparison.CurrentCultureIgnoreCase) ||
                                                             it.TableName.Equals(entityInfo.EntityName, StringComparison.CurrentCultureIgnoreCase));
                if (easyInfo == null)
                {
                    return;
                }
                var shortName = this.Builder.GetTranslationColumnName(easyInfo.ShortName.Trim()) + ".";
                sql = sql.Replace(itName, shortName);
            }
            WhereInfos.Add(sql);
        }