Example #1
0
        // $skip and $top
        // query.SetMaxResults(topQuery.Value);
        // query.SetFirstResult(skipQuery.Value);


        // SELECT {FIRST N SKIP M / TOP N}
        //     Field1, Field2, ..., FieldN
        // FROM {table}
        // {ORDER BY sortorder}
        // {OFFSET, LIMIT}

        // $orderby
        // https://msdn.microsoft.com/en-us/library/system.web.http.odata.query.orderbyqueryoption.orderbynodes(v=vs.118).aspx
        public void OrderBy(System.Text.StringBuilder stringBuilder, OrderByQuery orderByQuery)
        {
            stringBuilder.Append("ORDER BY ");

            int numOrderByNodes = orderByQuery.OrderByNodes.Count;
            int maxNode         = orderByQuery.OrderByNodes.Count - 1;

            for (int i = 0; i < numOrderByNodes; ++i)
            {
                if (orderByQuery.OrderByNodes[i] != null)
                {
                    stringBuilder.Append(orderByQuery.OrderByNodes[i].Name);
                    stringBuilder.Append(orderByQuery.OrderByNodes[i].Direction == OrderByDirection.Ascending ? " ASC" : " DESC");

                    if (i != maxNode)
                    {
                        stringBuilder.Append(", ");
                    }
                }
                else
                {
                    throw new System.Exception("Only ordering by properties is supported");
                }
            }
        }
Example #2
0
        public IList <Place> GetPlaces(List <string> placeNames, int numberOfHotels, OrderByQuery orderByQuery)
        {
            try
            {
                if (placeNames == null || placeNames.Count() < 1 || numberOfHotels < 1 || !Enum.IsDefined(typeof(OrderByQuery), orderByQuery))
                {
                    return(null);
                }

                IList <Place> places = new List <Place>();

                placeNames.ForEach(placeName =>
                {
                    Place place = _placeRepository.Get(placeName);

                    if (place == null)
                    {
                        return;
                    }
                    if (orderByQuery == OrderByQuery.Cheapest)
                    {
                        var filteredHotels = place.Hotels.OrderBy(hotel => hotel.Rate).Take(numberOfHotels);
                        place.Hotels       = filteredHotels.ToList();
                    }

                    places.Add(place);
                });
                return(places);
            }
            catch (Exception ex)
            {
                //TODO: Log error
                return(null);
            }
        }
Example #3
0
            public void Invalid_List_Of_Place_Names_Of_Type_Null_Returns_Null()
            {
                // Given
                int          numberOfHotels = 5;
                OrderByQuery orderByQuery   = OrderByQuery.Cheapest;
                // When
                var result = IPlaceService.GetPlaces(null, numberOfHotels, orderByQuery);

                // Then
                Assert.Null(result);
            }
Example #4
0
            public void Invalid_Number_Of_Hotels_Returns_Null()
            {
                //Given
                var placeNames = new List <string> {
                    "New_York_City", "Tokyo"
                };
                int          numberOfHotels = 0;
                OrderByQuery orderByQuery   = OrderByQuery.Cheapest;
                // When
                var result = IPlaceService.GetPlaces(placeNames, numberOfHotels, orderByQuery);

                // Then
                Assert.Null(result);
            }
Example #5
0
            public void List_Of_Only_1_Valid_Place_Name_Returns_List_Of_Only_1_Place_Object()
            {
                // Given
                var placeNames = new List <string> {
                    "Unite Saffer", "Tokyo"
                };
                int          numberOfHotels = 5;
                OrderByQuery orderByQuery   = OrderByQuery.Cheapest;
                // When
                var result = IPlaceService.GetPlaces(placeNames, numberOfHotels, orderByQuery);

                // Then
                Assert.IsType <List <Place> >(result);
                Assert.True(result.Count == 1);
            }
Example #6
0
            public void Invalid_List_Of_Place_Names_Returns_Empty_List_Of_Type_Person()
            {
                // Given
                var placeNames = new List <string> {
                    "Unite Saffer", "North Africa"
                };
                int          numberOfHotels = 5;
                OrderByQuery orderByQuery   = OrderByQuery.Cheapest;
                // When
                var result = IPlaceService.GetPlaces(placeNames, numberOfHotels, orderByQuery);

                // Then
                Assert.IsType <List <Place> >(result);
                Assert.True(result.Count == 0);
            }
Example #7
0
            public void Valid_Params_Returns_List_Of_Places()
            {
                //Given
                var placeNames = new List <string> {
                    "New_York_City", "Tokyo"
                };
                int          numberOfHotels = 5;
                OrderByQuery orderByQuery   = OrderByQuery.Cheapest;
                // When
                var result = IPlaceService.GetPlaces(placeNames, numberOfHotels, orderByQuery);

                // Then
                Assert.IsType <List <Place> >(result);
                Assert.True(result.Count > 0);
            }
Example #8
0
            public void Valid_Params_Returns_List_Of_Places_With_Lists_Of_Type_Hotel()
            {
                //Given
                var placeNames = new List <string> {
                    "New_York_City", "Tokyo"
                };
                int          numberOfHotels = 5;
                OrderByQuery orderByQuery   = OrderByQuery.Cheapest;
                // When
                var result = IPlaceService.GetPlaces(placeNames, numberOfHotels, orderByQuery);

                // Then
                Assert.All(result, place =>
                {
                    Assert.IsType <List <Hotel> >(place.Hotels);
                });
            }
Example #9
0
            public void Valid_Params_Returns_List_Of_Places_With_Specified_Number_Of_Ordered_Hotels()
            {
                //Given
                var placeNames = new List <string> {
                    "New_York_City", "Tokyo"
                };
                int          numberOfHotels = 5;
                OrderByQuery orderByQuery   = OrderByQuery.Cheapest;
                // When
                var result = IPlaceService.GetPlaces(placeNames, numberOfHotels, orderByQuery);

                // Then
                Assert.All(result, place =>
                {
                    Assert.True(place.Hotels.Count == numberOfHotels);
                });
            }
Example #10
0
        static void CAMLQueryWithSubQueryAndOrderby()
        {
            List<string> status = new List<string>();
            status.Add("Status1");
            status.Add("Status2");

            List<SubQuery> queries = new List<SubQuery>();
            foreach (string sta in status)
            {
                List<FieldQuery> singleQueries = new List<FieldQuery>();

                QBField Statusfield = new QBField("LU_Status", sta, FieldType.Lookup);
                QBField StatusHiddenfield = new QBField("StatusHidden", sta, FieldType.Text);

                FieldQuery sqe1 = new FieldQuery(StatusHiddenfield, OperationType.Neq, OperatorType.And);
                FieldQuery sqe = new FieldQuery(Statusfield, OperationType.Eq, OperatorType.And);

                singleQueries.Add(sqe1);
                singleQueries.Add(sqe);

                SubQuery subQuery = new SubQuery(singleQueries, OperatorType.Or);
                queries.Add(subQuery);
            }

            QBField domainName = new QBField();
            domainName.Name = "DomainName";
            QBField statusF = new QBField();
            statusF.Name = "LU_Status";

            List<QBOrderBy> allOrderBy = new List<QBOrderBy>();
            allOrderBy.Add(domainName.OrderByExpressionAsc);
            allOrderBy.Add(statusF.OrderByExpressionDesc);

            OrderByQuery orderByQuery = new OrderByQuery(allOrderBy);

            CAMLQuery oCAMLquery = new CAMLQuery(queries, 47, orderByQuery);

            Console.Write(oCAMLquery.ViewExpression);
        }
Example #11
0
        // $skip and $top
        // query.SetMaxResults(topQuery.Value);
        // query.SetFirstResult(skipQuery.Value);
        // SELECT {FIRST N SKIP M / TOP N}
        //     Field1, Field2, ..., FieldN
        // FROM {table}
        // {ORDER BY sortorder}
        // {OFFSET, LIMIT}
        // $orderby
        // https://msdn.microsoft.com/en-us/library/system.web.http.odata.query.orderbyqueryoption.orderbynodes(v=vs.118).aspx
        public void OrderBy(System.Text.StringBuilder stringBuilder, OrderByQuery orderByQuery)
        {
            stringBuilder.Append("ORDER BY ");

            int numOrderByNodes = orderByQuery.OrderByNodes.Count;
            int maxNode = orderByQuery.OrderByNodes.Count - 1;

            for (int i = 0; i < numOrderByNodes; ++i)
            {
                if (orderByQuery.OrderByNodes[i] != null)
                {
                    stringBuilder.Append(orderByQuery.OrderByNodes[i].Name);
                    stringBuilder.Append(orderByQuery.OrderByNodes[i].Direction == OrderByDirection.Ascending ? " ASC" : " DESC");

                    if (i != maxNode)
                        stringBuilder.Append(", ");
                }
                else
                {
                    throw new System.Exception("Only ordering by properties is supported");
                }
            }
        }
Example #12
0
        public async Task <IActionResult> GetArtists([FromQuery] ArtistFilterQuery filterQuery, [FromQuery] OrderByQuery orderByQuery, [FromQuery] PaginationQuery paginationQuery)
        {
            try
            {
                var pagination = _mapper.Map <PaginationModel>(paginationQuery);
                var orderBy    = _mapper.Map <IEnumerable <ArtistOrderByModel> >(orderByQuery);
                var filter     = _mapper.Map <ArtistFilterModel>(filterQuery);

                if (pagination.Valid)
                {
                    var artistsPaginationResult = await _artistService.GetPagedArtistsAsync(pagination, filter, orderBy);

                    var artistsResponse = _mapper.Map <List <ArtistResponse> >(artistsPaginationResult.Result);
                    return(Ok(new PagedResponse <ArtistResponse>(artistsResponse, artistsPaginationResult.PageState)));
                }
                else
                {
                    var artists = await _artistService.GetArtistsAsync(filter, orderBy);

                    return(Ok(new Response <IEnumerable <ArtistResponse> >(_mapper.Map <IEnumerable <ArtistResponse> >(artists))));
                }
            }
            catch (Exception ex)
            {
                return(StatusCode(StatusCodes.Status500InternalServerError, new ErrorResponse(ErrorMessages.Artist.FailedRead)));
            }
        }
Example #13
0
        public CAMLQuery(List <SubQuery> oQueryExpressions, Nullable <int> iRowLimit, OrderByQuery oOrderByExpression)
        {
            switch (oQueryExpressions.Capacity)
            {
            case 1:
                foreach (SubQuery QryExp in oQueryExpressions)
                {
                    _StartExpression += QryExp.Expression;
                }
                break;

            default:
                SubQuery oLastQueryExp = oQueryExpressions.Last <SubQuery>();
                foreach (SubQuery QryExp in oQueryExpressions)
                {
                    if (!QryExp.Equals(oLastQueryExp))
                    {
                        _StartExpression += QryExp.ExpressionOpearator.StartTag;
                        _StartExpression += QryExp.Expression;
                        _EndExpression   += QryExp.ExpressionOpearator.EndTag;
                    }
                    else
                    {
                        _StartExpression += QryExp.Expression;
                    }
                }
                break;
            }
            _Expression     += _StartExpression;
            _Expression     += _EndExpression;
            _WhereExpression = string.Format(_Where, _Expression);

            if (oOrderByExpression == null)
            {
                _QueryExpression = string.Format(_Query, _WhereExpression);
            }
            else
            {
                _QueryExpression = string.Format("{0}{1}", _WhereExpression, oOrderByExpression.Expression);
                _QueryExpression = string.Format(_Query, _QueryExpression);
            }

            if (iRowLimit.HasValue)
            {
                _RowLimit       = string.Format(_RowLimit, iRowLimit);
                _ViewExpression = string.Format(_ViewWithRowLimit, _QueryExpression, _RowLimit);
            }
            else
            {
                _ViewExpression = string.Format(_View, _QueryExpression);
            }
        }
        public override IQueryable <Customer> OrderBy(IQueryable <Customer> query)
        {
            if (string.IsNullOrWhiteSpace(OrderByQuery))
            {
                // return the default order
                return(query.OrderBy(c => c.CustomerId));
            }

            var orderByBuilder = new StringBuilder();

            // ex. "LastName, email desc"
            var orderParams = OrderByQuery.Trim().ToLower().Split(',');

            foreach (var param in orderParams)
            {
                if (string.IsNullOrWhiteSpace(param))
                {
                    continue;
                }

                var paramName        = param.Trim().Split(' ').First();
                var objProperty      = "";
                var orderByDirection = "";

                switch (paramName)
                {
                case "id":
                    objProperty      = "CustomerId";
                    orderByDirection = GetOrderByDirection(param);
                    break;

                case "email":
                    objProperty      = "EmailAddress";
                    orderByDirection = GetOrderByDirection(param);
                    break;

                case "lastmodified":
                    objProperty      = "ModifiedDate";
                    orderByDirection = GetOrderByDirection(param);
                    break;

                case "lastname":
                case "companyname":
                    objProperty      = paramName;
                    orderByDirection = GetOrderByDirection(param);
                    break;

                default:
                    break;
                }
                if (orderByBuilder.Length > 0)
                {
                    orderByBuilder.Append(", ");
                }
                orderByBuilder.AppendFormat($"{objProperty} {orderByDirection}");
            }

            // nuget package: System.Linq.Dynamic.Core
            //  provides string based query in OrderBy clause
            var orderByQuery = orderByBuilder.ToString();

            return(query.OrderBy(orderByQuery));
        }