static IEnumerable <TItem> Order <TItem>(IEnumerable <TItem> queryable, Func <Type, string, object> getArguments)
    {
        var items    = queryable.ToList();
        var orderBys = ArgumentReader.ReadOrderBy(getArguments).ToList();
        IOrderedEnumerable <TItem> ordered;

        if (orderBys.Count > 0)
        {
            var orderBy  = orderBys.First();
            var property = FuncBuilder <TItem> .BuildPropertyExpression(orderBy.Path);

            if (orderBy.Descending)
            {
                ordered = items.OrderByDescending(property);
            }
            else
            {
                ordered = items.OrderBy(property);
            }
        }
        else
        {
            return(items);
        }

        foreach (var orderBy in orderBys.Skip(1))
        {
            var property = FuncBuilder <TItem> .BuildPropertyExpression(orderBy.Path);

            if (orderBy.Descending)
            {
                ordered = ordered.ThenByDescending(property);
            }
            else
            {
                ordered = ordered.ThenBy(property);
            }
        }

        return(ordered);
    }