/// <summary>
        /// Sorts the data which defined property as descending (can be applied multiple times)
        /// </summary>
        /// <typeparam name="T">The type of entity class</typeparam>
        /// <param name="query">The query which applied to SQL</param>
        /// <param name="expression">Sorting expression</param>
        /// <returns></returns>
        public static IQuery <T> SortByDesc <T>(this IQuery <T> query, Expression <Func <T, object> > expression)
        {
            if (query.OrderByDescendingStatement.Length > 0)
            {
                query.OrderByDescendingStatement.Append(", ");
            }

            var orderByExpressions = ExpressionUtil.GetOrderByExpression <T>(expression.Body);

            query.OrderByDescendingStatement.Append(orderByExpressions.MemberName);
            query.OrderByDescendingStatement.Append(" DESC");

            return(query);
        }
        /// <summary>
        /// Sorts the data which defined property as ascending (can be applied multiple times)
        /// </summary>
        /// <typeparam name="T">The type of entity class</typeparam>
        /// <param name="query">The query which applied to SQL</param>
        /// <param name="expression">Sorting expression</param>
        /// <returns></returns>
        public static IQuery <T> SortBy <T>(this IQuery <T> query, Expression <Func <T, object> > expression)
        {
            if (query.OrderByAscendingStatement.Length > 0)
            {
                query.OrderByAscendingStatement.Append(", ");
            }

            var orderByExpressions = ExpressionUtil.GetOrderByExpression <T>(expression.Body);

            string orderByStatement = typeof(T).Name.ToLower() + "." + orderByExpressions.MemberName + " ASC";

            query.OrderByAscendingStatement.Append(orderByStatement);

            return(query);
        }