コード例 #1
0
        internal void AddColumn <TKey>(TControl value, Expression <Func <TEntity, TKey> > column)
        {
            var sortExpression = new TableSortOperation
            {
                CreateSort = (isPrimary, direction) =>
                {
                    if (isPrimary)
                    {
                        return(direction == SortDirection.Ascending
                            ? (Func <IQueryable <TEntity>, IOrderedQueryable <TEntity> >)
                                   (queryable => queryable.OrderBy(column))
                            : queryable => queryable.OrderByDescending(column));
                    }
                    else
                    {
                        return(direction == SortDirection.Ascending
                            ? (Func <IQueryable <TEntity>, IOrderedQueryable <TEntity> >)
                                   (queryable => ((IOrderedQueryable <TEntity>)queryable).ThenBy(column))
                            : (queryable => ((IOrderedQueryable <TEntity>)queryable).ThenByDescending(column)));
                    }
                }
            };

            _columns[value] = sortExpression;
        }
コード例 #2
0
        public IOrderedQueryable <TEntity> Sort(TRequest request, IQueryable <TEntity> queryable)
        {
            TableSortOperation sortOperation = null;

            var value     = _controls[0].Control(request);
            var direction = _controls[0].Direction(request);

            if (value == null || !_columns.TryGetValue(value, out sortOperation))
            {
                if (_defaultColumn != null)
                {
                    _columns.TryGetValue(_defaultColumn, out sortOperation);
                }
            }

            if (sortOperation == null)
            {
                return(_columns.Values.First().CreateSort(true, SortDirection.Default)(queryable));
            }

            var sort   = sortOperation.CreateSort(true, direction);
            var result = sort(queryable);

            foreach (var ctrl in _controls.Skip(1))
            {
                value     = ctrl.Control(request);
                direction = ctrl.Direction(request);

                if (value == null || !_columns.TryGetValue(value, out sortOperation))
                {
                    continue;
                }

                sort   = sortOperation.CreateSort(false, direction);
                result = sort(result);
            }

            return(result);
        }