private void LoadData(IEntityCollectionView <T> view) { #region query var requestId = ++RequestId; var query = Queryable.IncludeTotalCount(); #endregion query #region paging if (view.PageSize > 0) { query = query .Skip(view.PageIndex * view.PageSize) .Take(view.PageSize); } #endregion pagging #region filters foreach (var filterExpression in view.FilterExpressions) { var remoteExpression = DataServiceQueryable.ToRemoteExpression(filterExpression); query = query.Where(remoteExpression); } #endregion filters #region sorting // apply sort descriptors IOrderedDataServiceQueryable <T, T> sortedQuery = null; foreach (var sortDescription in view.SortDescriptions) { var sortExpression = sortDescription.ToExpression <T>(); if (ReferenceEquals(sortedQuery, null)) { sortedQuery = query.OrderBy(sortExpression); } else { sortedQuery = sortedQuery.ThenBy(sortExpression); } } if (!ReferenceEquals(sortedQuery, null)) { query = sortedQuery; } #endregion sorting #region request // notify data loading OnDataLoading(); query.ExecuteAsync( (result) => { if (requestId < RequestId) { // request outdated return; } // synchronize with main thread Dispatcher.BeginInvoke((Action) delegate { // check for exception if (result.IsFaulted) { var queryException = QueryException; if (queryException != null) { queryException(this, new ExceptionEventArgs(result.Exception)); OnDataLoaded(null); return; } else { throw new Exception("Query failed", result.Exception); } } // retrieve data var entitySet = result.EntitySet; // fill items view.Clear(); foreach (var item in entitySet) { view.Add(item); } // sets total count view.TotalItemCount = entitySet.TotalCount.HasValue ? (int)entitySet.TotalCount.Value : -1; // notify data loaded OnDataLoaded(entitySet); }); } ); #endregion request }
public static IOrderedDataServiceQueryable <TEntity, TBase> ThenBy <TEntity, TBase>(this IOrderedDataServiceQueryable <TEntity, TBase> queriable, RLinq.LambdaExpression expression) where TEntity : TBase where TBase : Entity { var newQueriable = new OrderedDataServiceQueryable <TEntity, TBase>((OrderedDataServiceQueryable <TEntity, TBase>)queriable); newQueriable.Sortings.Add(new DataServiceQueryable <TEntity, TBase> .Sort(expression, RLinq.SortDirection.Ascending)); return(newQueriable); }