private ElasticSearchPagingOptions <PersistentEvent> GetPagingWithSortingOptions(PagingOptions paging)
        {
            var pagingOptions = new ElasticSearchPagingOptions <PersistentEvent>(paging);

            pagingOptions.SortBy.Add(s => s.OnField(f => f.Date).Descending());
            pagingOptions.SortBy.Add(s => s.OnField("_uid").Descending());

            return(pagingOptions);
        }
        private ElasticSearchPagingOptions <PersistentEvent> GetPagingWithSortingOptions(PagingOptions paging, bool sortByAscending)
        {
            var pagingOptions = new ElasticSearchPagingOptions <PersistentEvent>(paging);

            if (sortByAscending)
            {
                pagingOptions.SortBy.Add(s => s.OnField(f => f.Date).Ascending());
                pagingOptions.SortBy.Add(s => s.OnField("_uid").Ascending());
            }
            else
            {
                pagingOptions.SortBy.Add(s => s.OnField(f => f.Date).Descending());
                pagingOptions.SortBy.Add(s => s.OnField("_uid").Descending());
            }

            if (!String.IsNullOrEmpty(pagingOptions.Before) && pagingOptions.Before.IndexOf('-') > 0)
            {
                var parts = pagingOptions.Before.Split(new[] { '-' }, StringSplitOptions.RemoveEmptyEntries);

                long beforeUtcTicks;
                if (parts.Length == 2 && Int64.TryParse(parts[0], out beforeUtcTicks) && !String.IsNullOrEmpty(parts[1]))
                {
                    pagingOptions.BeforeFilter = (
                        Filter <PersistentEvent> .Term(e => e.Date, new DateTime(beforeUtcTicks, DateTimeKind.Utc)) &&
                        Filter <PersistentEvent> .Range(r => r.OnField("_uid").Lower(parts[1]))
                        ) || Filter <PersistentEvent> .Range(r => r.OnField(e => e.Date).Lower(new DateTime(beforeUtcTicks, DateTimeKind.Utc)));
                }
            }

            if (!String.IsNullOrEmpty(pagingOptions.After) && pagingOptions.After.IndexOf('-') > 0)
            {
                var parts = pagingOptions.After.Split(new[] { '-' }, StringSplitOptions.RemoveEmptyEntries);

                long afterUtcTicks;
                if (parts.Length == 2 && Int64.TryParse(parts[0], out afterUtcTicks) && !String.IsNullOrEmpty(parts[1]))
                {
                    pagingOptions.AfterFilter = (
                        Filter <PersistentEvent> .Term(e => e.Date, new DateTime(afterUtcTicks, DateTimeKind.Utc)) &&
                        Filter <PersistentEvent> .Range(r => r.OnField("_uid").Greater(parts[1]))
                        ) || Filter <PersistentEvent> .Range(r => r.OnField(e => e.Date).Greater(new DateTime(afterUtcTicks, DateTimeKind.Utc)));
                }
            }

            return(pagingOptions);
        }