public IQueryable <TResource> Apply(ModelProvider provider, IQueryable <TResource> query)
        {
            for (var i = 0; i < _sorts.Length; i++)
            {
                var sort = _sorts[i];
                if (provider.TrySort(sort.Property, out var property))
                {
                    var    lambda = sort.Apply(provider.Target, _ => null);
                    string method;
                    if (i == 0)
                    {
                        method = sort.Direction == SortDirection.Ascending
                            ? nameof(Queryable.OrderBy)
                            : nameof(Queryable.OrderByDescending);
                    }
                    else
                    {
                        method = sort.Direction == SortDirection.Ascending
                            ? nameof(Queryable.ThenBy)
                            : nameof(Queryable.ThenByDescending);
                    }

                    var exp = Expression.Call(typeof(Queryable), method,
                                              new[] { provider.Target.Type, property.PropertyType },
                                              query.Expression, lambda);
                    query = query.Provider.CreateQuery <TResource>(exp);
                }
                else
                {
                    throw new ArgumentException("Cannot sort selected property");
                }
            }

            return(query);
        }