public async Task <PageList <Message> > GetMessagesForUser(MessageParams messageParams) { var messages = _context.Messages .Include(u => u.Sender).ThenInclude(p => p.Photos) .Include(u => u.Recipient).ThenInclude(p => p.Photos) .AsQueryable(); switch (messageParams.MessageContainer) { case "Inbox": messages = messages.Where(u => u.RecipientId == messageParams.UserId && u.RecipientDeleted == false); break; case "Outbox": messages = messages.Where(u => u.SenderId == messageParams.UserId && u.SenderDeleted == false); break; default: messages = messages.Where(u => u.RecipientId == messageParams.UserId && u.IsRead == false && u.RecipientDeleted == false); break; } var messagesEnum = await messages .OrderByDescending(d => d.MessageSent) .ToListAsync(); return(PageList <Message> .CreateEnumerable( messagesEnum.DistinctBy(m => m.RecipientId), messageParams.PageNumber, messageParams.pageSize )); }