public List <UserExtended> GetGroupPostsLickers(long groupId, List <long> blackListedUserIds, DateTime minPostDate) { var users = new List <UserExtended>(); try { using (var api = _apiFactory.CreateVkApi(true)) { var wallPosts = GetPostsByGroupId(groupId, api, minPostDate) .Where(x => x.Date >= minPostDate) .Select(x => x); foreach (var wallPost in wallPosts) { var usersChunk = new List <UserExtended>(); var affectedUserIds = users.Select(x => x.Id).Distinct().ToList(); if (!wallPost.OwnerId.HasValue || !wallPost.Id.HasValue) { continue; } Console.WriteLine($"Get information for {wallPost.GetPostUrl()} {wallPost.Date}"); var likerIds = _likeService.GetUsersWhoLiked(wallPost.OwnerId.Value, wallPost.Id.Value, LikeObjectType.Post, api); likerIds = likerIds.Where(id => !affectedUserIds.Contains(id) && !blackListedUserIds.Contains(id)) .Select(id => id) .Distinct() .ToList(); Console.WriteLine($"likerIds count is {likerIds.Count}"); var usersToAdd = likerIds.Select(x => new UserExtended(new User { Id = x })).ToList(); usersChunk.AddRange(usersToAdd); var ownerId = -wallPost.OwnerId.Value; var profiles = new List <User>(); var commentsForPost = _commentService.GetComments(0 - ownerId, wallPost.Id.Value, api, ref profiles); Console.WriteLine($"comments count is {commentsForPost.Count}"); var totalCommentsLikersCount = 0; foreach (var comment in commentsForPost) { if (comment.FromId.HasValue && comment.FromId.Value > 0) { var commentOwnerAffected = usersChunk.Select(x => x.Id).Contains(comment.FromId.Value) || affectedUserIds.Contains(comment.FromId.Value) || blackListedUserIds.Contains(comment.FromId.Value); if (comment.Thread.Items.Any()) { } if (!commentOwnerAffected) { var profile = profiles.FirstOrDefault(x => x.Id == comment.FromId); if (profile != null) { usersChunk.Add(profile.ToExtendedModel()); } else { usersChunk.Add(new UserExtended(new User { Id = comment.FromId.Value })); } } } var commentLikerIds = _likeService.GetUsersWhoLiked(wallPost.OwnerId.Value, comment.Id, LikeObjectType.Comment, api); totalCommentsLikersCount += commentLikerIds.Count; var usersChunkIds = usersChunk.Select(x => x.Id).Distinct().ToList(); commentLikerIds = commentLikerIds .Where(id => !usersChunkIds.Contains(id) && !affectedUserIds.Contains(id) && !blackListedUserIds.Contains(id)) .Distinct() .ToList(); usersChunk.AddRange(commentLikerIds.Select(x => new UserExtended(new User { Id = x })).ToList()); } Console.WriteLine($"totalCommentsLikersCount count is {totalCommentsLikersCount}"); var newUsers = usersChunk.Where(u => !blackListedUserIds.Contains(u.Id)).Select(u => u).ToList(); var newUsersMessage = string.Join(", ", newUsers.Select(x => x.GetDomainForUser())); Console.WriteLine($"newUsers count is {newUsers.Count}"); Console.WriteLine($"newUsers are {newUsersMessage}"); Console.WriteLine($"Total new users count is {users.Count}"); users.AddRange(usersChunk); } } } catch (Exception e) { Console.WriteLine($"{e.Message}"); } users = users .Where(u => !blackListedUserIds.Contains(u.Id)) .Select(u => u) .ToList(); return(users); }