public WhereItem(WhereType whereType, string name, object value)
 {
     WhereType = whereType;
     Name = name;
     Value = value;
     UniqueKey = Guid.NewGuid().ToString().Replace("-", "");
 }
        public void AddAction(string playerA, string playerB, ActionType actionType, ModifierType modifyer, Weapon weapon, WhereType where, ArmyType teamA, ArmyType teamB)
        {
            Player playerGet = getPlayer(playerA, teamA);
            Player playerDo = null;
            
            //damage from the world (harrier, falling) will not be considered in this version
            if (playerB == string.Empty)
            {
                playerDo = playerGet;
            } else
            {
                playerDo = getPlayer(playerB, teamB);
            }

            switch (actionType)
            {
                case ActionType.Kill:
                    playerGet.AddAction(playerDo, ActionType.Die, modifyer, weapon, where);
                    playerDo.AddAction(playerGet, ActionType.Kill, modifyer, weapon, where);
                    break;
                case ActionType.Damage:
                    playerGet.AddAction(playerDo, ActionType.Damage, modifyer, weapon, where);
                    playerDo.AddAction(playerGet, ActionType.Damage, modifyer, weapon, where);
                    break;
            }
        }
Exemple #3
0
        private void CreateExpression(WhereType type, string column, string value, string prefix = "", string postfix = "")
        {
            IWhere exp = new Where(type, LogicOperator)
            {
                Column     = column,
                IsColumn   = true,
                IsRaw      = false,
                Value      = value,
                Prefix     = prefix,
                Postfix    = postfix,
                TableAlias = TableAlias
            };

            Append(exp);
        }
Exemple #4
0
        public DWhere(WhereType type, string fieldName, params object[] values)
        {
            WhereType = type;
            FieldName = fieldName;

            if (type == WhereType.Field)
            {
                CompareTo = Convert.ToString(GetParamVal(values, 0));
                return;
            }

            var firstValue = new FieldVariant(GetParamVal(values, 0));

            if (type == WhereType.Equal)
            {
                CompareTo = firstValue.Value();
            }
        }
Exemple #5
0
        private JoinSqlBuilder <TNewPoco, TBasePoco> WhereInternal <T>(WhereType whereType, Expression <Func <T, bool> > where)
        {
            Type associatedType = this.PreviousAssociatedType(typeof(T), typeof(T));

            if (associatedType == null)
            {
                throw new Exception("Either the source or destination table should be associated ");
            }
            var ev = OrmLiteConfig.DialectProvider.ExpressionVisitor <T>();

            ev.WhereStatementWithoutWhereString = true;
            ev.PrefixFieldWithTableName         = true;
            ev.Where(where);
            var str = ev.WhereExpression;

            if (String.IsNullOrEmpty(str) == false)
            {
                this.whereList.Add(new KeyValuePair <string, WhereType>(str, whereType));
            }
            return(this);
        }
Exemple #6
0
        internal static string WhereTypeToString(WhereType type, bool isFirst)
        {
            if (isFirst && (type == WhereType.Or || type == WhereType.OrNot ||
                            type == WhereType.OrHaving || type == WhereType.OrNotHaving))
            {
                throw new InvalidOperationException("No 'Where' (or 'And') is added just yet, why are you adding an 'Or'?");
            }

            return(type switch
            {
                WhereType.And => isFirst ? "where" : "and",
                WhereType.Or => "or",
                WhereType.AndNot => isFirst ? "where not" : "and not",
                WhereType.OrNot => "or not",

                WhereType.AndHaving => isFirst ? "having" : "and",
                WhereType.OrHaving => "or",
                WhereType.AndNotHaving => isFirst ? "having not" : "and not",
                WhereType.OrNotHaving => "or not",

                _ => throw new NotImplementedException(),
            });
Exemple #7
0
        public string GetExpression(WhereType whereType, string paramName)
        {
            switch (whereType)
            {
            case WhereType.IsNull:
            case WhereType.IsNotNull:
                return(GetSelector(whereType));

            case WhereType.Eq:
            case WhereType.NotEq:
            case WhereType.Gt:
            case WhereType.Lt:
            case WhereType.GtEq:
            case WhereType.LtEq:
            case WhereType.In:
            case WhereType.Like:
            case WhereType.NotIn:
                return($"{GetSelector(whereType)} {paramName}");

            default:
                throw new ArgumentOutOfRangeException(nameof(whereType));
            }
        }
Exemple #8
0
        public string GetExpression(WhereType whereType, string paramName)
        {
            switch (whereType)
            {
            case WhereType.IsNull:
            case WhereType.IsNotNull:
                return(GetSelector(whereType));

            case WhereType.Eq:
            case WhereType.NotEq:
            case WhereType.Gt:
            case WhereType.Lt:
            case WhereType.GtEq:
            case WhereType.LtEq:
            case WhereType.In:
            case WhereType.Like:
            case WhereType.NotIn:
                return(string.Format("{0} {1}", GetSelector(whereType), paramName));

            default:
                throw new ArgumentOutOfRangeException("whereType");
            }
        }
Exemple #9
0
        public bool IsWithoutValue(WhereType whereType)
        {
            switch (whereType)
            {
            case WhereType.Eq:
            case WhereType.NotEq:
            case WhereType.Gt:
            case WhereType.Lt:
            case WhereType.GtEq:
            case WhereType.LtEq:
            case WhereType.Like:
            case WhereType.In:
            case WhereType.NotIn:
                return(false);

            case WhereType.IsNull:
            case WhereType.IsNotNull:
                return(true);

            default:
                throw new ArgumentOutOfRangeException("whereType");
            }
        }
Exemple #10
0
 public Where(WhereType type, object s)
 {
     this.Type = type;
     this.SingleObject = s;
 }
 public void AddAction(Player playerTo, ActionType actionType, ModifierType modifier, Weapon weapon, WhereType where)
 {
     listAction.Add(new Action() { PlayerTo = playerTo, ActionType = actionType, Modifier = modifier, Weapon = weapon, Where = where}); 
 }
Exemple #12
0
 public QWhereCondition()
 {
     whereType = WhereType.None;
 }
Exemple #13
0
 /// <summary>
 ///
 /// </summary>
 internal QWhereCondition()
 {
     whereType = WhereType.None;
 }
 private static WhereClip ToWhereClipChild(System.Linq.Expressions.Expression e, WhereType wt = WhereType.Where)
 {
     if (e is BinaryExpression)
     {
         return(ConvertBinary((BinaryExpression)e, wt));
     }
     if (e is MethodCallExpression)
     {
         return(ConvertMethodCall((MethodCallExpression)e));
     }
     if (e is UnaryExpression)
     {
         return(ConvertUnary((UnaryExpression)e));
     }
     if (IsBoolFieldOrProperty(e))
     {
         var key = ((MemberExpression)e).Member.Name;
         return(new WhereClip());
     }
     if (e is ConstantExpression)
     {
         var key = ((ConstantExpression)e).Value;
         if (DataUtils.ConvertValue <bool>(key))
         {
             return(new WhereClip(" 1=1 "));
         }
         return(new WhereClip(" 1=2 "));
     }
     throw new Exception("暂时不支持的Where条件Lambda表达式写法!请使用经典写法!");
 }
Exemple #15
0
        private static ExpEnity <T> Where <T>(this ExpEnity <T> expr1, Expression <Func <T, bool> > expr2, WhereType type)
        {
            var expr1Body   = expr1.WhereExprBody;
            var name        = $"{expr2.Parameters[0].Name}.";
            var bodyContent = Resolve(expr2).Replace(name, "");

            foreach (var item in _whereFilter)
            {
                bodyContent = bodyContent.Replace(item.Key, item.Value);
            }

            var right = Expression.Constant(
                $"( {bodyContent} )"
                );

            if (string.IsNullOrEmpty(expr1Body))
            {
                expr1.WhereExpr = Expression.Lambda <Func <string> >(Expression.Constant($"{right}"));
            }
            else
            {
                expr1.WhereExpr = Expression.Lambda <Func <string> >(Expression.Constant($"{expr1Body} {type.ToString()} {right}"));
            }
            return(expr1);
        }
Exemple #16
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="c1"></param>
 /// <param name="whereType"></param>
 /// <param name="c2"></param>
 internal QWhereCondition(QCondition c1, WhereType whereType, QCondition c2)
 {
     leftCondition  = c1;
     this.whereType = whereType;
     rightCondition = c2;
 }
Exemple #17
0
 /// <summary>
 /// 分页查询
 /// </summary>
 /// <param name="pageInfo"></param>
 /// <param name="p1"></param>
 /// <param name="p2"></param>
 /// <param name="sQL"></param>
 /// <returns></returns>
 public virtual PageInfo <T> SelectPage <T>(PageInfo <T> pageInfo, string cols, string whereCol, WhereType whereType)
 {
     return(baseDAL.SelectPage(pageInfo, cols, whereCol, whereType));
 }
        /// <summary>
        /// 创建修改语句
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="t"></param>
        /// <param name="cols"></param>
        /// <param name="strWhere">修改语句的条件/列【逗号隔开】</param>
        /// <returns></returns>
        public static SqlModel UpdateSql <T>(T t, string cols, string strWhere, WhereType whereType)
        {
            Type type = typeof(T);

            PrimaryKeyAttribute primaryKeyAttribute = type.GetPrimaryKey();

            string primaryKeyName = primaryKeyAttribute.ColumnName;

            PropertyInfo[] propertyInfos = PropertyHelper.GetProperties <T>(cols);

            //生成要插入的列 $的出现{}就是占位符 里面就可以放变量
            string colums = string.Join(",", propertyInfos.Where(p => !p.IsPrimaryKey() && p.IsExist()).Select(p => string.Format("[{0}]=@{0}", p.GetColumnName())));


            bool isSql = WhereType.Columns.Equals(whereType);

            if (isSql && !string.IsNullOrEmpty(strWhere))
            {
                PropertyInfo[] whereProp = PropertyHelper.GetProperties <T>(strWhere);
                strWhere = string.Join(" and ", whereProp.Where(p => !p.IsPrimaryKey()).Select(p => string.Format("[{0}]=@{0}", p.GetColumnName())));

                //合并两个数组 [去掉交集]
                List <PropertyInfo> newsProps = new List <PropertyInfo>(propertyInfos);
                bool flag = true;

                for (int w = 0; w < whereProp.Length; w++)
                {
                    for (int i = 0; i < newsProps.Count; i++)
                    {
                        if (newsProps[i].Name == whereProp[w].Name)
                        {
                            flag = false;
                        }
                    }
                    if (flag)
                    {
                        newsProps.Add(whereProp[w]);
                    }
                }
                propertyInfos = newsProps.ToArray();
            }

            //生成插入的参数
            string paramColums = string.Join(",", propertyInfos.Where(p => !p.IsPrimaryKey()).Select(p => $"@{p.GetColumnName()}"));

            //生成参数数组
            SQLiteParameter[] arrParams = CreateParameters(propertyInfos, t);

            //默认更加主键修改
            if (string.IsNullOrEmpty(strWhere))
            {
                strWhere = $"{primaryKeyName} =@{primaryKeyName}";
            }

            string sql = $" UPDATE [{type.GetTableName()}] SET {colums} WHERE {strWhere} ";

            SqlModel sqlModel = new SqlModel()
            {
                Sql           = sql,
                SqlParameters = arrParams
            };

            return(sqlModel);
        }
Exemple #19
0
 /// <summary>
 ///  查询
 /// </summary>
 /// <typeparam name="T"></typeparam>
 /// <param name="t"></param>
 /// <returns></returns>
 public virtual List <T> SelectList <T>(T t, string cols, string whereCol, WhereType whereType)
 {
     return(baseDAL.SelectList(t, cols, whereCol, whereType));
 }
        /// <summary>
        ///  分页查询
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="pageInfo"></param>
        /// <param name="cols"></param>
        /// <param name="whereCols">column1='column1' and column2 ='column2'</param>
        /// <param name="whereType"></param>
        /// <returns></returns>
        public static SqlModel SelectSqlByPage <T>(PageInfo <T> pageInfo, string cols, string whereCols, WhereType whereType)
        {
            Type type = typeof(T);

            PropertyInfo[] propertyInfos = PropertyHelper.GetProperties <T>(cols);

            string colums = string.Join(",", propertyInfos.Where(p => p.IsExist()).Select(p => $"[{p.GetColumnName()}]"));

            bool isSql = WhereType.Columns.Equals(whereType);

            int start    = pageInfo.CurrentPage > 1 ? pageInfo.CurrentPage - 1 : 0;
            int offlimit = start * pageInfo.PageSize;//

            if (isSql && !string.IsNullOrEmpty(whereCols))
            {
                PropertyInfo[] whereProp = PropertyHelper.GetProperties <T>(whereCols);
                whereCols = string.Join(",", whereProp.Where(p => !p.IsPrimaryKey()).Select(p => string.Format("[{0}]=@{0}", p.GetColumnName())));

                //合并两个数组 [去掉交集]
                List <PropertyInfo> newsProps = new List <PropertyInfo>(propertyInfos);
                bool flag = true;

                for (int w = 0; w < whereProp.Length; w++)
                {
                    for (int i = 0; i < newsProps.Count; i++)
                    {
                        if (newsProps[i].Name == whereProp[w].Name)
                        {
                            flag = false;
                        }
                    }
                    if (flag)
                    {
                        newsProps.Add(whereProp[w]);
                    }
                }
                propertyInfos = newsProps.ToArray();
            }

            //生成参数数组
            SQLiteParameter[] arrParams = CreateParameters(propertyInfos, pageInfo.ParamsSearch);

            if (string.IsNullOrEmpty(whereCols))
            {
                whereCols = "  1=1 ";
            }

            string sql = $"SELECT {colums} FROM [{type.GetTableName()}] WHERE {whereCols} limit {offlimit},{pageInfo.PageSize}";

            SqlModel sqlModel = new SqlModel()
            {
                Sql           = sql,
                SqlParameters = arrParams
            };

            return(sqlModel);
        }
Exemple #21
0
 public Where(WhereType type, object s, IEnumerable<Order> orders)
 {
     this.Type = type;
     this.SingleObject = s;
     this.Orders = new List<Order>(orders);
 }
Exemple #22
0
        /// <summary>
        ///  分页查询
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <typeparam name="whereCols">查询条件</typeparam>
        /// <param name="t"></param>
        /// <returns></returns>
        public PageInfo <T> SelectPage <T>(PageInfo <T> pageInfo, string cols, string whereCols, WhereType whereType)
        {
            SqlModel selectModel = CreateSqlHelper.SelectSqlByPage(pageInfo, cols, whereCols, whereType);

            DataTable dataTable = SQLiteHelper.ExecuteDataTable(selectModel.Sql, false, selectModel.SqlParameters);

            List <T> lists = DbConvert.TableToList <T>(dataTable);


            SqlModel selectCountModel = CreateSqlHelper.SelectCount(pageInfo.ParamsSearch, whereCols, whereType);

            object result = SQLiteHelper.ExecuteScalar(selectCountModel.Sql, false, selectCountModel.SqlParameters);

            int total     = Convert.ToInt32(result);
            int totalPage = 0;

            if (total % pageInfo.PageSize == 0)
            {
                totalPage = total / pageInfo.PageSize;
            }
            else
            {
                totalPage = total / pageInfo.PageSize + 1;
            }

            pageInfo.TotalPage    = totalPage;
            pageInfo.Records      = lists;
            pageInfo.CurrentCount = total;
            //lists.Count;

            return(pageInfo);
        }
Exemple #23
0
 public Where(WhereType type, object s)
 {
     this.Type         = type;
     this.SingleObject = s;
 }
Exemple #24
0
 private IComparisonQueryBuilder PrepareHavingLeaf(WhereType type, string column)
 {
     _preparedLeaf = (type, column, _query.HavingForest);
     return(this);
 }
Exemple #25
0
 public Where(WhereType type, object s, IEnumerable <Order> orders)
 {
     this.Type         = type;
     this.SingleObject = s;
     this.Orders       = new List <Order>(orders);
 }
Exemple #26
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="ue"></param>
 /// <param name="wtype"></param>
 /// <returns></returns>
 private static WhereOperation ConvertUnary(string tableName, UnaryExpression ue, WhereType wtype = WhereType.Where)
 {
     switch (ue.NodeType)
     {
     case ExpressionType.Not:
         return(!ToWhereOperationChild(tableName, ue.Operand, wtype));
     }
     throw new Exception("暂时不支持的NodeType(" + ue.NodeType + ") lambda写法!请使用经典写法!");
 }
Exemple #27
0
        private static WhereOperation ConvertBinary(string tableName, BinaryExpression be, WhereType wt = WhereType.Where)
        {
            switch (be.NodeType)
            {
            case ExpressionType.Equal:
                return(LeftAndRight(tableName, be, QueryOperator.Equal, wt));

            case ExpressionType.GreaterThan:
                return(LeftAndRight(tableName, be, QueryOperator.Greater, wt));

            case ExpressionType.GreaterThanOrEqual:
                return(LeftAndRight(tableName, be, QueryOperator.GreaterOrEqual, wt));

            case ExpressionType.LessThan:
                return(LeftAndRight(tableName, be, QueryOperator.Less, wt));

            case ExpressionType.LessThanOrEqual:
                return(LeftAndRight(tableName, be, QueryOperator.LessOrEqual, wt));

            case ExpressionType.NotEqual:
                return(LeftAndRight(tableName, be, QueryOperator.NotEqual, wt));

            case ExpressionType.AndAlso:
                return(ToWhereOperationChild(tableName, be.Left, wt) && ToWhereOperationChild(tableName, be.Right, wt));

            case ExpressionType.OrElse:
                return(ToWhereOperationChild(tableName, be.Left, wt) || ToWhereOperationChild(tableName, be.Right, wt));

            default:
                throw new Exception("暂时不支持的Where条件(" + be.NodeType + ")Lambda表达式写法!请使用经典写法!");
            }
        }
        private static WhereClip LeftAndRight(BinaryExpression be, QueryOperator co, WhereType wtype = WhereType.Where)
        {
            ColumnFunction   leftFunction;
            ColumnFunction   rightFunction;
            MemberExpression leftMe = null;
            MemberExpression rightMe;

            System.Linq.Expressions.Expression expLeft  = be.Left;
            System.Linq.Expressions.Expression expRight = be.Right;
            if (be.Left.NodeType == ExpressionType.Convert)
            {
                expLeft = ((UnaryExpression)be.Left).Operand;
            }
            if (be.Right.NodeType == ExpressionType.Convert)
            {
                expRight = ((UnaryExpression)be.Right).Operand;
            }
            var isAgain = false;

Again:
            if (expLeft.NodeType == ExpressionType.Constant ||
                (expLeft.NodeType == ExpressionType.MemberAccess && ((MemberExpression)expLeft).Expression == null) || isAgain)
            {
                if (expRight.NodeType == ExpressionType.Constant ||
                    (expRight.NodeType == ExpressionType.MemberAccess && ((MemberExpression)expRight).Expression == null))
                {
                    return(DataUtils.ConvertValue <bool>(fastEvaluator.Eval(be))
                        ? new WhereClip(" 1=2 ")
                        : new WhereClip(" 1=1 "));
                }
                else
                {
                    var keyRightName = GetMemberName(expRight, out rightFunction, out rightMe);

                    if (expLeft.NodeType == ExpressionType.MemberAccess)
                    {
                        var left = (MemberExpression)expLeft;
                        if (left.Expression != null && (wtype == WhereType.JoinWhere || left.Expression.ToString() == rightMe.Expression.ToString()))
                        {
                            ColumnFunction functionLeft;
                            var            keyLeft = GetMemberName(expLeft, out functionLeft, out left);
                            if (keyRightName.Contains("$"))
                            {
                                return(new WhereClip(new Field(keyLeft, left.Expression.Type), GetValue(expRight), co));
                            }
                            else
                            {
                                return(new WhereClip(new Field(keyRightName, rightMe.Expression.Type), new Field(keyLeft, left.Expression.Type), co));
                            }
                        }
                    }
                    object value = GetValue(expLeft);
                    if (keyRightName.Contains("$"))
                    {
                        if (DataUtils.ConvertValue <bool>(fastEvaluator.Eval(be)))
                        {
                            return(new WhereClip(" 1=2 "));
                        }
                        return(new WhereClip(" 1=1 "));
                    }
                    if (value != null)
                    {
                        return(new WhereClip(new Field(keyRightName, rightMe.Expression.Type), value, co));
                    }
                    switch (co)
                    {
                    case QueryOperator.Equal:
                        return(new Field(keyRightName, rightMe.Expression.Type).IsNull());

                    case QueryOperator.NotEqual:
                        return(new Field(keyRightName, rightMe.Expression.Type).IsNotNull());
                    }
                    throw new Exception("null值只支持等于或不等于!出错比较符:" + co.ToString());
                }
            }
            else
            {
                var key = "";
                try
                {
                    key = GetMemberName(expLeft, out leftFunction, out leftMe);
                    if (key.Contains("$"))
                    {
                        isAgain = true;
                        goto Again;
                    }
                }
                catch (Exception)
                {
                    isAgain = true;
                    goto Again;
                }
                if (expRight.NodeType == ExpressionType.MemberAccess)
                {
                    var right = (MemberExpression)expRight;
                    if (right.Expression != null && (wtype == WhereType.JoinWhere || right.Expression == leftMe.Expression))
                    {
                        ColumnFunction functionRight;
                        var            keyRight = GetMemberName(expRight, out functionRight, out right);
                        return(new WhereClip(
                                   new Field(key, leftMe.Expression.Type),
                                   new Field(keyRight, right.Expression.Type)
                                   , co));
                    }
                }
                object value = GetValue(expRight);
                if (value == null)
                {
                    if (co == QueryOperator.Equal)
                    {
                        return(new Field(key, leftMe.Expression.Type).IsNull());
                    }
                    if (co == QueryOperator.NotEqual)
                    {
                        return(new Field(key, leftMe.Expression.Type).IsNotNull());
                    }
                    throw new Exception("null值只支持等于或不等于!");
                }
                return(new WhereClip(new Field(key, leftMe.Expression.Type), value, co));
            }
        }
Exemple #29
0
        private static WhereOperation ToWhereOperationChild(string tableName, System.Linq.Expressions.Expression e, WhereType wt = WhereType.Where)
        {
            if (e is BinaryExpression)
            {
                return(ConvertBinary(tableName, (BinaryExpression)e, wt));
            }
            if (e is MethodCallExpression)
            {
                return(ConvertMethodCall(tableName, (MethodCallExpression)e));
            }
            if (e is UnaryExpression)
            {
                return(ConvertUnary(tableName, (UnaryExpression)e));
            }
            if (IsBoolFieldOrProperty(e))
            {
                var d = (MemberExpression)e;

                return(new WhereOperation(new Field(d.Member.Name), true, QueryOperator.Equal));
            }
            if (e is ConstantExpression)
            {
                var key = ((ConstantExpression)e).Value;
                if (DataUtils.ConvertValue <bool>(key))
                {
                    return(new WhereOperation(" 1=1 "));
                }
                return(new WhereOperation(" 1=2 "));
            }
            throw new Exception("暂时不支持的Where条件Lambda表达式写法!请使用经典写法!");
        }
Exemple #30
0
        public static IQueryable <T> Where <T, K>(IQueryable <T> entity, string field, K query, WhereType whereType)
        {
            // Get the method information for the EnumType method
            MethodInfo mi = typeof(K).GetMethod(Enum.GetName(typeof(WhereType), whereType), new Type[] { typeof(K) });

            // Build the parameter for the expression
            ParameterExpression X = Expression.Parameter(typeof(T), "x");

            // Build the member that was specified for the expression
            MemberExpression meField = Expression.PropertyOrField(X, field);

            // Call the Type Method method on the member
            MethodCallExpression filter = Expression.Call(meField, mi, Expression.Constant(query));

            // Build the expression
            Expression <Func <T, bool> > expression = Expression.Lambda <Func <T, bool> >(filter, X);

            // Perform the search logic and return the results
            return(entity.Where(expression));
        }
 public static WhereItem IsEqualTo(this string inner, WhereType whereType, object value)
 {
     return new WhereItem(whereType, inner, value);
 }
Exemple #32
0
 /// <summary>
 /// Initializes a new instance of the <see cref="WhereModel"/> with the specified <see cref="WhereType"/>
 /// </summary>
 /// <param name="whereType">Current <see cref="WhereType"/> type.</param>
 protected WhereModel(WhereType whereType)
 {
     Type = whereType;
 }
Exemple #33
0
 public Where(WhereType type, List <IWhere> whereForest)
 {
     Type        = type;
     WhereForest = whereForest;
 }