Infragistics.Controls.DataSource.ODataVirtualDataSourceDataProviderWorker.MakeTaskForRequest C# (CSharp) Метод

MakeTaskForRequest() защищенный Метод

protected MakeTaskForRequest ( AsyncDataSourcePageRequest request, int retryDelay ) : void
request AsyncDataSourcePageRequest
retryDelay int
Результат void
        protected override void MakeTaskForRequest(AsyncDataSourcePageRequest request, int retryDelay)
        {
            int actualPageSize = 0;
            SortDescriptionCollection sortDescriptions = null;
            lock (SyncLock)
            {
                actualPageSize = ActualPageSize;
                sortDescriptions = SortDescriptions;
            }

            ODataFeedAnnotations annotations = new ODataFeedAnnotations();

            var client = _client.For(_entitySet);

            lock (SyncLock)
            {
                if (FilterExpressions != null &&
                    FilterExpressions.Count > 0 &&
                    _filterString == null)
                {
                    StringBuilder sb = new StringBuilder();
                    bool first = true;
                    foreach (var expr in FilterExpressions)
                    {
                        if (first)
                        {
                            first = false;
                        }
                        else
                        {
                            sb.Append(" AND ");
                        }

                        ODataDataSourceFilterExpressionVisitor visitor = new ODataDataSourceFilterExpressionVisitor();

                        visitor.Visit(expr);

                        var txt = visitor.ToString();
                        if (FilterExpressions.Count > 1)
                        {
                            txt = "(" + txt + ")";
                        }
                        sb.Append(txt);
                    }
                    _filterString = sb.ToString();
                }

                if (_filterString != null)
                {
                    client = client.Filter(_filterString);
                }

                if (SortDescriptions != null)
                {
                    foreach (var sort in SortDescriptions)
                    {
                        if (sort.Direction == System.ComponentModel.ListSortDirection.Descending)
                        {
                            client = client.OrderByDescending(sort.PropertyName);
                        }
                        else
                        {
                            client = client.OrderBy(sort.PropertyName);
                        }
                    }
                }

                if (DesiredProperties != null && DesiredProperties.Length > 0)
                {
                    client = client.Select(DesiredProperties);   
                }
            }

            Task task;
            if (request.Index == SchemaRequestIndex)
            {
                task = client
                    .Count()
                    .FindScalarAsync<int>();
            }
            else
            {
                task = client
                    .Skip(request.Index * actualPageSize)
                    .Top(actualPageSize)
                    .FindEntriesAsync(annotations);
            }

            request.TaskHolder = new AsyncDataSourcePageTaskHolder();
            request.TaskHolder.Task = task;

            lock (SyncLock)
            {
                Tasks.Add(request);
                _annotations.Add(annotations);
            }
        }
    }