/// <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); }