public async Task <List <Post> > SearchPosts(List <string> tagIds, GetListParams <Post> param)
        {
            if (tagIds.Count() == 0)
            {
                return(new List <Post>());
            }
            var relatedPostTags = await _db.PostTags
                                  .Where(u => tagIds.Contains(u.TagId) && u.Post.DateRemoved == null)
                                  .GroupBy(u => u.PostId)
                                  .Select(u => new
            {
                PostId = u.Key,
                Count  = u.Count()
            })
                                  .Skip(param.Offset)
                                  .Take(param.Limit)
                                  .OrderByDescending(u => u.Count)
                                  .ToListAsync();

            var postIds = relatedPostTags.Select(u => u.PostId);

            if (postIds.Count() == 0)
            {
                return(new List <Post>());
            }
            var posts = await _db.Posts.Where(u => postIds.Contains(u.Id)).ToListAsync();

            posts.Sort((a, b) =>
            {
                var countA = postIds.FirstOrDefault(u => u == a.Id);
                var countB = postIds.FirstOrDefault(u => u == b.Id);
                return(countA.CompareTo(countB));
            });
            return(posts);
        }
示例#2
0
        public async Task <ActionResult <List <PostResponse> > > SearchPosts(int?offset, int?limit, [FromQuery] string[] tags)
        {
            var paging = new GetListParams <Post>(offset, limit);
            var posts  = await _repo.SearchPosts(tags.ToList(), paging);

            return(Ok(posts.Select(u => new PostResponse(u)).ToList()));
        }
示例#3
0
        public UserOrGroup GetListEx(GetListParams @params)
        {
            var parameters = new VkParameters
            {
                { "type", @params.Type },
                { "owner_id", @params.OwnerId },
                { "item_id", @params.ItemId },
                { "page_url", @params.PageUrl },
                { "filter", @params.Filter },
                { "friends_only", @params.FriendsOnly },
                { "extended", true },
                { "offset", @params.Offset },
                { "skip_own", @params.SkipOwn }
            };

            if (@params.FriendsOnly.HasValue && @params.FriendsOnly.Value)
            {
                if (@params.Count <= 100)
                {
                    parameters.Add("count", @params.Count);
                }
            }
            else
            {
                if (@params.Count <= 1000)
                {
                    parameters.Add("count", @params.Count);
                }
            }
            return(_vk.Call("likes.getList", parameters, true));
        }
示例#4
0
        public ReadOnlyCollection <long> GetList(GetListParams @params)
        {
            var parameters = new VkParameters
            {
                { "type", @params.Type },
                { "owner_id", @params.OwnerId },
                { "item_id", @params.ItemId },
                { "page_url", @params.PageUrl },
                { "filter", @params.Filter },
                { "friends_only", @params.FriendsOnly },
                { "offset", @params.Offset },
                { "skip_own", @params.SkipOwn }
            };

            if (@params.FriendsOnly.HasValue && @params.FriendsOnly.Value)
            {
                if (@params.Count <= 100)
                {
                    parameters.Add("count", @params.Count);
                }
            }
            else
            {
                if (@params.Count <= 1000)
                {
                    parameters.Add("count", @params.Count);
                }
            }

            VkResponseArray response = _vk.Call("likes.getList", parameters);

            return(response.ToReadOnlyCollectionOf <long>(x => x));
        }
        public async Task <List <Post> > GetPosts(List <string> tags, GetListParams <Post> paging)
        {
            var query = GetPostsByTagsQuery(tags);

            query = Helper.ApplyPaging(query, paging);
            var posts = await query.ToListAsync();

            return(posts);
        }
        public async Task <List <PostComment> > GetPostComments(int postId, GetListParams <PostComment> paging)
        {
            var query = _db.PostComments.Where(u => u.PostId == postId && u.DateRemoved == null && u.ParentPostCommentId == null);

            query = Helper.ApplyPaging(query, paging);
            var comments = await query.ToListAsync();

            return(comments);
        }
示例#7
0
        public JsonResult GetList(GetListParams parameters)
        {
            if (ModelState.IsValid)
            {
                try
                {
                    var bllInstance = BllFactory.GetBllInstance(parameters.TableName);
                    if (bllInstance == null)
                    {
                        return(Json(ErrorModel.InputError));
                    }

                    var condition = string.IsNullOrEmpty(parameters.Conditions)
                        ? string.Empty
                        : parameters.Conditions.Replace("###", " AND ");

                    var fields = string.IsNullOrEmpty(parameters.Fields)
                        ? null
                        : parameters.Fields.Split(new[] { "###" }, StringSplitOptions.RemoveEmptyEntries);

                    object data;
                    var    type = bllInstance.GetType();
                    if (parameters.PageIndex <= 0 || parameters.PageSize <= 0)
                    {
                        data = type.InvokeMember("QueryList", BindingFlags.InvokeMethod, null, bllInstance,
                                                 new object[] { condition, fields, null, parameters.OrderField, parameters.Desending });
                    }
                    else
                    {
                        data = type.InvokeMember("QueryPageList", BindingFlags.InvokeMethod, null, bllInstance,
                                                 new object[] { parameters.PageIndex, parameters.PageSize, condition, fields, null, parameters.OrderField, parameters.Desending });
                    }

                    return(Json(ErrorModel.GetDataSuccess(data)));
                }
                catch (Exception ex)
                {
                    ExceptionLogBll.ExceptionPersistence(nameof(CommonController), nameof(CommonController), ex);

                    return(Json(ErrorModel.InputError));
                }
            }

            return(Json(ErrorModel.InputError));
        }
示例#8
0
        public static IQueryable <T> ApplyPaging <T>(IQueryable <T> query, GetListParams <T> pagingParam)
        {
            var chain = query;

            if (pagingParam.OrderBy != null)
            {
                if (pagingParam.OrderDirection == GetListParams <T> .OrderDirections.ASC)
                {
                    chain = chain.OrderBy(pagingParam.OrderBy);
                }
                else
                {
                    chain = chain.OrderByDescending(pagingParam.OrderBy);
                }
            }
            chain = chain.Skip(pagingParam.Offset).Take(pagingParam.Limit);
            return(chain);
        }