Example #1
0
        /// <summary>
        /// Apply order to query
        /// </summary>
        /// <param name="query"></param>
        /// <returns></returns>
        public IOrderedQueryable <T> ApplyOrders(IQueryable <T> query)
        {
            //get the order list
            IGenericDataOrder <T>[] orderlist    = new IGenericDataOrder <T>[] { };
            IGenericDataOrder <T>   currentOrder = this;

            while (currentOrder != null)
            {
                orderlist = orderlist.Concat(new IGenericDataOrder <T>[] { currentOrder }).ToArray();
                IGenericDataOrder <T> parentOrder = currentOrder.GetParent();
                if (parentOrder != null)
                {
                    currentOrder = parentOrder;
                }
                else
                {
                    currentOrder = null;
                }
            }
            orderlist = orderlist.Reverse().ToArray();

            //build the ordered query
            IOrderedQueryable <T> queryOrdered = null;

            foreach (IGenericDataOrder <T> order in orderlist)
            {
                if (queryOrdered == null)
                {
                    if (order.SortAscending)
                    {
                        queryOrdered = order.ApplyOrderByAscending(query);
                    }
                    else
                    {
                        queryOrdered = order.ApplyOrderByDescending(query);
                    }
                }
                else
                {
                    if (order.SortAscending)
                    {
                        queryOrdered = order.ApplyThenByAscending(queryOrdered);
                    }
                    else
                    {
                        queryOrdered = order.ApplyThenByDescending(queryOrdered);
                    }
                }
            }

            return(queryOrdered);
        }