コード例 #1
0
        private QueryComplete VisitInner(IExpression expression)
        {
            MongoDBVisitor visitor = new MongoDBVisitor();

            visitor.Visite(expression);
            //combine the order expressions.
            this.OrderFields.AddRange(visitor.OrderFields);

            this.CategoryQueries = this.CategoryQueries.Concat(visitor.CategoryQueries);
            return(visitor.QueryComplete);
        }
コード例 #2
0
ファイル: MongoDBVisitor.cs プロジェクト: kooboo-jifeng/CMS
        private IMongoQuery VisitInner(IExpression expression)
        {
            MongoDBVisitor visitor = new MongoDBVisitor();
            visitor.Visite(expression);
            //combine the order expressions.
            this.OrderFields.AddRange(visitor.OrderFields);

            this.CategoryQueries = this.CategoryQueries.Concat(visitor.CategoryQueries);
            return visitor.MongoQuery;
        }
コード例 #3
0
        public virtual object Execute()
        {
            var visitor = new MongoDBVisitor();

            visitor.Visite(ContentQuery.Expression);
            var mongoCursor = Query(visitor);

            if (mongoCursor == null)
            {
                return(DefaultValueExecute(visitor.CallType));
            }
            if (visitor.Skip != 0)
            {
                mongoCursor.Skip = visitor.Skip;
            }

            SortByBuilder sortBuilder = new SortByBuilder();

            foreach (var item in visitor.OrderFields)
            {
                if (item.Descending)
                {
                    sortBuilder.Descending(item.FieldName);
                }
                else
                {
                    sortBuilder.Ascending(item.FieldName);
                }
            }
            mongoCursor = mongoCursor.SetSortOrder(sortBuilder);

            object result = null;

            switch (visitor.CallType)
            {
            case Kooboo.CMS.Content.Query.Expressions.CallType.Count:
                result = Convert.ToInt32(mongoCursor.Count());
                break;

            case Kooboo.CMS.Content.Query.Expressions.CallType.First:
                result = mongoCursor.First().ToContent();
                break;

            case Kooboo.CMS.Content.Query.Expressions.CallType.Last:
                result = mongoCursor.Last().ToContent();
                break;

            case Kooboo.CMS.Content.Query.Expressions.CallType.LastOrDefault:
                result = mongoCursor.Last().ToContent();
                break;

            case Kooboo.CMS.Content.Query.Expressions.CallType.FirstOrDefault:
                result = mongoCursor.FirstOrDefault().ToContent();
                break;

            case Kooboo.CMS.Content.Query.Expressions.CallType.Unspecified:
            default:
                if (visitor.Take != 0)
                {
                    result = mongoCursor.Take(visitor.Take).Select(it => it.ToContent());
                }
                else
                {
                    result = mongoCursor.Select(it => it.ToContent());
                }
                break;
            }

            if (mongoCursor.Database.Server.State != MongoServerState.Disconnected)
            {
                mongoCursor.Database.Server.Disconnect();
            }
            return(result);
        }
コード例 #4
0
ファイル: MongoDBQuery.cs プロジェクト: Godoy/CMS
        public virtual object Execute()
        {
            var visitor = new MongoDBVisitor();
            visitor.Visite(ContentQuery.Expression);
            var mongoCursor = Query(visitor);
            if (mongoCursor == null)
            {
                return DefaultValueExecute(visitor.CallType);
            }
            if (visitor.Skip != 0)
            {
                mongoCursor.Skip = visitor.Skip;
            }

            SortByBuilder sortBuilder = new SortByBuilder();
            
            foreach (var item in visitor.OrderFields)
            {
                if (item.Descending)
                {
                    sortBuilder.Descending(item.FieldName);
                }
                else
                {
                    sortBuilder.Ascending(item.FieldName);
                }
            }
            mongoCursor = mongoCursor.SetSortOrder(sortBuilder);

            object result = null;
            switch (visitor.CallType)
            {
                case Kooboo.CMS.Content.Query.Expressions.CallType.Count:
                    result = Convert.ToInt32(mongoCursor.Count());
                    break;
                case Kooboo.CMS.Content.Query.Expressions.CallType.First:
                    result = mongoCursor.First().ToContent();
                    break;
                case Kooboo.CMS.Content.Query.Expressions.CallType.Last:
                    result = mongoCursor.Last().ToContent();
                    break;
                case Kooboo.CMS.Content.Query.Expressions.CallType.LastOrDefault:
                    result = mongoCursor.Last().ToContent();
                    break;
                case Kooboo.CMS.Content.Query.Expressions.CallType.FirstOrDefault:
                    result = mongoCursor.FirstOrDefault().ToContent();
                    break;
                case Kooboo.CMS.Content.Query.Expressions.CallType.Unspecified:
                default:
                    if (visitor.Take != 0)
                    {
                        result = mongoCursor.Take(visitor.Take).Select(it => it.ToContent());
                    }
                    else
                        result = mongoCursor.Select(it => it.ToContent());
                    break;
            }

            //if (mongoCursor.Database.Server.State != MongoServerState.Disconnected)
            //{
            //    mongoCursor.Database.Server.Disconnect();
            //}
            return result;
        }