コード例 #1
0
        public IActionResult Get([FromQuery] MessageSearchDto search)
        {
            try
            {
                var result = new MessageResultsDto();

                // Default to first page
                if (search.Page < 1)
                {
                    search.Page = 1;
                }

                // Default to 20 records per page
                if (search.Size < 1)
                {
                    search.Size = 20;
                }

                result =
                    _repo.SearchMessages(search,
                                         m =>
                                         // By Category Id
                                         (search.Cat == null || m.CategoryId == search.Cat)

                                         // By Sender Name like
                                         && (string.IsNullOrEmpty(search.Sender) || m.Name.Contains(search.Sender))

                                         // By Sender Email
                                         && (string.IsNullOrEmpty(search.Email) || m.Email == search.Email)

                                         // By Subject
                                         && (string.IsNullOrEmpty(search.Subject) || m.Subject.Contains(search.Subject))

                                         // Only read or unread messages
                                         && (search.Read == null ||
                                             (search.Read == true && m.DateRead != null) ||
                                             (search.Read == false && m.DateRead == null))

                                         // Messages sent from certain date
                                         && (search.From == null || m.DateSent.Date >= search.From.Value.Date)

                                         // Messages sent upto certain date
                                         && (search.To == null || m.DateSent.Date <= search.To.Value.Date)
                                         );

                // TODO: Fix AutoMapper Error: Unmapped properties:  Category
                // var dtos = _mapper.Map<IEnumerable<Message>, IEnumerable<MessageDto>>(entities);

                return(Ok(result));
            }
            catch (Exception ex)
            {
                _logger.LogError($"Failed to get messages: {ex}");
                return(BadRequest("Failed to get messages"));
            }
        }
コード例 #2
0
        public MessageResultsDto SearchMessages(MessageSearchDto s, Expression <Func <Message, bool> > predicate)
        {
            // if search criteria provided then search by it, otherwise get all records without criteria
            var query = predicate == null ?
                        _ctx.Messages :
                        _ctx.Messages.Where(predicate);

            // if sort field provided then implement OrderBy
            if (!string.IsNullOrEmpty(s.SortBy))
            {
                query = query
                        .OrderBy(s.SortBy, s.Desc)
                        .ThenBy("Id");
            }

            // total number of records for the given search
            var total = query.Count();

            // Number of records to skip for this paging result
            var skip = (s.Page - 1) * s.Size;

            // Only select records on the current page using Take and Skip
            var records = query
                          .Skip(skip)
                          .Take(s.Size)
                          .ToList();

            // Return paging result dto
            return(new MessageResultsDto()
            {
                Page = s.Page,
                Size = s.Size,
                Total = total,
                Records = records
            });
        }