public static List <PropertyInfo> GetOrderBysFromQueryable <T>(IQueryable <T> queryable)
        {
            var vistor = new OrderByCollectionVisitor();

            vistor.Visit(queryable.Expression);
            return(vistor.OrderedProperties);
        }
Esempio n. 2
0
        public IQueryable <T> ApplyOrder(IQueryable <T> items, GridSortDirection direction)
        {
            var existingOrders = OrderByCollectionVisitor.GetOrderBysFromQueryable(items);
            var orderToApply   = OrderByCollectionVisitor.GetOrderByFromExpression(_expression);

            if (existingOrders.Any(prop => prop == orderToApply))
            {
                // order was already applied, so skip applying it
                return(items);
            }

            switch (direction)
            {
            case GridSortDirection.Ascending:
                return(items.OrderBy(_expression));

            case GridSortDirection.Descending:
                return(items.OrderByDescending(_expression));

            default:
                throw new ArgumentOutOfRangeException("direction");
            }
        }