Ejemplo n.º 1
0
        /// <summary>
        /// The GetHackerNewsItemExpressionSort.
        /// </summary>
        /// <param name="expressionBuilder">The expressionBuilder<see cref="LambdaExpressionBuilder{HackerNewsItem}"/>.</param>
        /// <param name="orderByField">The orderByField<see cref="HackerNewsFieldEnum"/>.</param>
        /// <param name="orderByFieldDesc">The orderByFieldDesc<see cref="bool"/>.</param>
        /// <returns>The <see cref="Expression{Func{HackerNewsItem, object}}"/>.</returns>
        private Expression <Func <HackerNewsItem, object> > GetHackerNewsItemExpressionSort(LambdaExpressionBuilder <HackerNewsItem> expressionBuilder, HackerNewsFieldEnum orderByField, bool orderByFieldDesc)
        {
            QuerySort querySort = new QuerySort
            {
                PropertyPath = orderByField.GetDescription(),
                Desc         = orderByFieldDesc
            };

            return(expressionBuilder.BuildQuerySortingExpression(querySort));
        }
        protected MethodInfo GetOrderMethod(bool isFirst, QuerySort querySort, Type type, Type[] parameterDefinitions, Type[] chainedOrderParameterDefinitions, Type[] typeArguments)
        {
            if (isFirst)
            {
                return(querySort.Direction == SortDirection.Ascending ?
                       MethodProvider.MakeGenericMethod(type, "OrderBy", parameterDefinitions, typeArguments) :
                       MethodProvider.MakeGenericMethod(type, "OrderByDescending", parameterDefinitions, typeArguments));
            }

            return(querySort.Direction == SortDirection.Ascending ?
                   MethodProvider.MakeGenericMethod(type, "ThenBy", chainedOrderParameterDefinitions, typeArguments) :
                   MethodProvider.MakeGenericMethod(type, "ThenByDescending", chainedOrderParameterDefinitions, typeArguments));
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Get sort expression from <seealso cref="PageParameters.SortBy"/>.
        /// </summary>
        /// <param name="querySort">The querySort<see cref="QuerySort"/>.</param>
        /// <returns>.</returns>
        public Expression <Func <TEntity, object> > BuildQuerySortingExpression(QuerySort querySort)
        {
            if (querySort == null)
            {
                return(null);
            }

            string propertyPath = GetPropertyPath(typeof(TEntity), querySort.PropertyPath.Split('.'), string.Empty);

            ParameterExpression param = Expression.Parameter(typeof(TEntity), "lambdaParameter");
            Expression          body  = propertyPath.Split('.').Aggregate((Expression)param, Expression.PropertyOrField);
            Expression <Func <TEntity, object> > expression = Expression.Lambda <Func <TEntity, object> >(Expression.Convert(body, typeof(object)), param);

            return(expression);
        }
Ejemplo n.º 4
0
        private QuerySort GetSort(QueryTerm queryTerm)
        {
            QuerySort result = new QuerySort();

            if (queryTerm.Order == 0)
            {
                result.SortDefault = true;
            }
            else if (queryTerm.Order == (int)SortProperty.Price)
            {
                if (queryTerm.Descending == (int)SortDirection.Descending)
                {
                    result.SortPriceDesc = true;
                }
                else
                {
                    result.SortPriceAsc = true;
                }
            }
            return(result);
        }
Ejemplo n.º 5
0
        /// <summary>
        /// Builds dynamic sort string based on parameters
        /// </summary>
        /// <param name="sort"></param>
        /// <returns></returns>
        //============================================================
        //Revision History
        //Date        Author          Description
        //06/28/2017  TB               Created
        //============================================================
        public static string BuildSortString(QuerySort sort)
        {
            string sortOrder = sort.desc ? "desc" : "";

            return(string.Format("{0} {1}", sort.selector, sortOrder));
        }
Ejemplo n.º 6
0
        private static void Main(string[] args)
        {
            LambdaExpressionBuilder <Subject> expressionBuilder = new LambdaExpressionBuilder <Subject>();

            IEnumerable <Subject> foodList = new Seed().GetSubjectList();

            IList <QueryFilter> queryFilterList = new List <QueryFilter>
            {
                new QueryFilter {
                    PropertyPath  = "Id",
                    Operator      = OperatorEnum.EqualTo,
                    PropertyValue = "0"
                }
            };

            QuerySort querySort = new QuerySort
            {
                PropertyPath = "Id",
                Desc         = false
            };

            Expression <Func <Subject, bool> >   filteringQuery = expressionBuilder.BuildQueryFilteringExpression(queryFilterList);
            Expression <Func <Subject, object> > sortingQuery   = expressionBuilder.BuildQuerySortingExpression(querySort);

            List <Subject> result = foodList.Where(filteringQuery.Compile())
                                    .AsQueryable()
                                    .OrderBy(sortingQuery)
                                    .ToList();

            Console.WriteLine("------------------");
            Console.WriteLine("----  QUERY  -----");
            Console.WriteLine("------------------");
            Console.WriteLine(expressionBuilder.ToString(filteringQuery));
            Console.WriteLine("------------------");
            Console.WriteLine("----  SORT  ------");
            Console.WriteLine("------------------");
            Console.WriteLine(expressionBuilder.ToString(sortingQuery));
            Console.WriteLine("------------------");
            Console.WriteLine("----  RESULT  ----");
            Console.WriteLine("------------------");

            for (int i = 0; i < result.Count; i++)
            {
                Console.WriteLine(result[i].ToString());
            }

            queryFilterList = new List <QueryFilter>
            {
                new QueryFilter {
                    PropertyPath = "Teacher.Name", Operator = OperatorEnum.Contains, PropertyValue = "a"
                },
            };

            querySort = new QuerySort
            {
                PropertyPath = "teacher.name",
                Desc         = false
            };

            filteringQuery = expressionBuilder.BuildQueryFilteringExpression(queryFilterList);
            sortingQuery   = expressionBuilder.BuildQuerySortingExpression(querySort);

            result = foodList.Where(filteringQuery.Compile())
                     .AsQueryable()
                     .OrderBy(sortingQuery)
                     .ToList();

            Console.WriteLine("------------------");
            Console.WriteLine("----  QUERY  -----");
            Console.WriteLine("------------------");
            Console.WriteLine(expressionBuilder.ToString(filteringQuery));
            Console.WriteLine("------------------");
            Console.WriteLine("----  SORT  ------");
            Console.WriteLine("------------------");
            Console.WriteLine(expressionBuilder.ToString(sortingQuery));
            Console.WriteLine("------------------");
            Console.WriteLine("----  RESULT  ----");
            Console.WriteLine("------------------");

            for (int i = 0; i < result.Count; i++)
            {
                Console.WriteLine(result[i].ToString());
            }

            Console.ReadLine();
        }