public List <T> GetRawDtos <T, K>(Expression <Func <T, bool> > predicate = null, Expression <Func <T, K> > orderBy = null, int?skip = null, int?limit = null)
            where T : IHasId <T>
        {
            var query = repo.Query <T>();

            if (predicate != null)
            {
                query = query.Where(predicate);
            }
            if (orderBy != null)
            {
                query = query.OrderBy(orderBy);
            }
            if (skip != null || limit != null)
            {
                ILiteQueryableResult <T> result = null;
                if (skip != null)
                {
                    result = query.Skip(skip.Value);
                }
                if (limit != null)
                {
                    result = query.Limit(limit.Value);
                }
                return(result.ToList());
            }
            return(query.ToList());
        }
示例#2
0
        // TODO: unit tests
        public IEnumerable <UnprocessedDocument> Query(
            string?Where       = null,
            string?OrderByAsc  = null,
            string?OrderByDesc = null,
            int?Offset         = null,
            int?Limit          = null)
        {
            if (OrderByAsc != null && OrderByDesc != null)
            {
                // TODO: better exception, maybe
                throw new ArgumentException();
            }

            var query = Collection.Query();

            query = Where != null?query.Where(Where) : query;

            query = OrderByAsc != null?query.OrderBy(OrderByAsc) : query;

            query = OrderByDesc != null?query.OrderByDescending(OrderByDesc) : query;

            ILiteQueryableResult <UnprocessedDocument> result = query;

            result = Offset != null?result.Offset(Offset.Value) : result;

            result = Limit != null?result.Limit(Limit.Value) : result;

            return(result.ToEnumerable());
        }
示例#3
0
        public Task <ContentItem[]> GetContentItems(ContentItemQuery query)
        {
            var q = _liteRepository.Query <ContentItem>();

            if (!string.IsNullOrEmpty(query.AppId))
            {
                q = q.Where(ci => ci.AppId == query.AppId);
            }
            if (!string.IsNullOrEmpty(query.Id))
            {
                q = q.Where(ci => ci.Id == query.Id);
            }
            if (!string.IsNullOrEmpty(query.CollectionId))
            {
                q = q.Where(ci => ci.CollectionId == query.CollectionId);
            }
            if (!string.IsNullOrEmpty(query.ContentKey))
            {
                q = q.Where(ci => ci.ContentKey == query.ContentKey);
            }
            if (!string.IsNullOrEmpty(query.ContentKeyStartsWith))
            {
                q = q.Where(ci => ci.ContentKey.StartsWith(query.ContentKeyStartsWith));
            }

            switch (query.OrderBy)
            {
            case ContentItemQuery.ContentItemsOrderBy.LastModifiedAtDescending:
                q = q.OrderByDescending(ci => ci.LastModifiedAt);
                break;

            case ContentItemQuery.ContentItemsOrderBy.ContentKey:
                q = q.OrderBy(ci => ci.ContentKey);
                break;
            }

            ILiteQueryableResult <ContentItem> result = q;

            if (query.Offset.HasValue)
            {
                result = result.Skip(query.Offset.Value);
            }
            if (query.First.HasValue)
            {
                result = result.Limit(query.First.Value);
            }

            return(Task.FromResult(result.ToArray()));
        }
示例#4
0
 public LiteDataQueryResult(ILiteQueryable <T> queryable, ILiteQueryableResult <T> result)
 {
     _queryable = queryable;
     _result    = result;
 }