public async Task <PagedList <User> > GetUsers(UserParams userParams)
        {
            var users = _context.Users.Include(p => p.Photos);

            return(await PagedList <User> .CreateAysnc(users, userParams.PageNumber, userParams.PageSize));
        }
Example #2
0
        public async Task <PagedList <User> > GetUsersAsync(UserParams userParams)
        {
            var query = _db.Users
                        .Include(i => i.Photos)
                        .Include(i => i.Likers)
                        .Include(i => i.Likees)
                        .AsQueryable();

            query = query.Where(w => (w.Gender == userParams.Gender || userParams.Gender == null) && w.Id != userParams.UserId);

            if (userParams.Likers)
            {
                query = query.Where(w => w.Likees.Any(a => a.LikeeId == userParams.UserId));
            }
            if (userParams.Likees)
            {
                query = query.Where(w => w.Likers.Any(a => a.LikerId == userParams.UserId));
            }

            DateTime?minDob = null;
            DateTime?maxDob = null;

            if (userParams.MaxAge is int max)
            {
                minDob = DateTime.Today.AddYears(-max - 1);
            }
            if (userParams.MinAge is int min)
            {
                maxDob = DateTime.Today.AddYears(-min);
            }
            query = query.Where(w => (w.DateOfBirth >= minDob || minDob == null) && (w.DateOfBirth <= maxDob || maxDob == null));
            // Još neki od slučajeva sa pattern matchingom
            //var minDob2 = userParams.MaxAge !=null ? DateTime.Today.AddYears((int)-userParams.MaxAge - 1) : (DateTime?)null;
            //var minDob3 = userParams.MaxAge is int maxx
            //    ? DateTime.Today.AddYears((int) -userParams.MaxAge - 1)
            //    : (DateTime?) null;

            if (!string.IsNullOrEmpty(userParams.OrderBy))
            {
                switch (userParams.OrderBy)
                {
                case "created":
                    query = query.OrderBy(o => o.Created); break;

                case "createdDesc":
                    query = query.OrderByDescending(o => o.Created);
                    break;

                case "age":
                    query = query.OrderBy(o => o.DateOfBirth);
                    break;

                case "ageDesc":
                    query = query.OrderByDescending(o => o.DateOfBirth);
                    break;

                default:
                    query = query.OrderByDescending(o => o.LastActive);
                    break;
                }
            }

            var pagedList = await PagedList <User> .CreateAsync(query, userParams.PageNumber, userParams.PageSize);

            return(pagedList);
        }