Beispiel #1
0
    public static IQueryable <T> OrderBy <T>(this IQueryable <T> data,
                                             OrderExpressions <T> mapper, params string[] arguments)
    {
        if (arguments.Length == 0)
        {
            throw new ArgumentException(@"You need at least one argument!", "arguments");
        }
        List <SortArgument> sorting = arguments.Select(a => new SortArgument(a)).ToList();
        IQueryable <T>      result  = null;

        for (int i = 0; i < sorting.Count; i++)
        {
            SortArgument     sort   = sorting[i];
            LambdaExpression lambda = mapper[sort.Keyword];
            if (i == 0)
            {
                result = InvokeQueryableMethod(sort.Ascending ?
                                               OrderbyMethod : OrderbyDescendingMethod, data, lambda);
            }
            else
            {
                result = InvokeQueryableMethod(sort.Ascending ?
                                               ThenByMethod : ThenByDescendingMethod, result, lambda);
            }
        }
        return(result);
    }
    public static IOrderedEnumerable <T> OrderBy <T>(this IEnumerable <T> data,
                                                     OrderExpressions <T> mapper, params string[] arguments)
    {
        if (arguments.Length == 0)
        {
            throw new ArgumentException(@"You need at least one argument!", "arguments");
        }
        List <SortArgument>    sorting = arguments.Select(a => new SortArgument(a)).ToList();
        IOrderedEnumerable <T> result  = null;

        for (int i = 0; i < sorting.Count; i++)
        {
            SortArgument     sort   = sorting[i];
            Func <T, object> lambda = mapper[sort.Keyword];
            if (i == 0)
            {
                result = sorting[i].Ascending ?
                         data.OrderBy(lambda) :
                         data.OrderByDescending(lambda);
            }
            else
            {
                result = sorting[i].Ascending ?
                         result.ThenBy(lambda) :
                         result.ThenByDescending(lambda);
            }
        }
        return(result);
    }
Beispiel #3
0
        public SelectQuery <T> OrderByDescending <F>(Expression <Func <T, F> > expression)
        {
            OrderExpressions.Add(new OrderExpressionContainer {
                Expression = expression, IsDescending = true
            });

            return(this);
        }
Beispiel #4
0
 protected override void VisitOrder(Query.Expressions.OrderExpression expression)
 {
     OrderExpressions.Add(new OrderExpression()
     {
         OrderExprssion = it => it[expression.FieldName], Descending = expression.Descending
     });
     base.VisitOrder(expression);
 }
        public P OrderByDesc(params string[] columns)
        {
            foreach (var c in columns)
            {
                OrderExpressions.Add(new OrderExpression(c, OrderType.Descending));
            }

            return((P)Parent);
        }
Beispiel #6
0
        public SelectQuery <T> Using(IEnumerable <OrderExpressionContainer> expressions)
        {
            if (expressions.IsEmpty())
            {
                return(this);
            }

            OrderExpressions.AddRange(expressions);

            return(this);
        }
Beispiel #7
0
        public void Test_ExtractOrderId(int orderId)
        {
            var order = new Order()
            {
                OrderId = orderId,
            };

            var actualOrderId = OrderExpressions.ExtractOrderId(order);

            Assert.Equal(orderId, actualOrderId);
        }
Beispiel #8
0
        public void Test_AddOrderCosts(decimal cost1, decimal cost2, decimal expected)
        {
            var order1 = new Order()
            {
                Cost = cost1
            };
            var order2 = new Order()
            {
                Cost = cost2
            };

            var sumOfOrderCosts = OrderExpressions.SumOrderCosts(order1, order2);

            Assert.Equal(expected, sumOfOrderCosts);
        }