示例#1
0
        public IList <MessageDto> Messages(MessageQueryDto queryDto)
        {
            queryDto.StatusName = StatusName.Standardized(queryDto.StatusName);

            var name = queryDto.MessageType == MessageType.Publish
                ? _options.PublishedCollection
                : _options.ReceivedCollection;
            var collection = _database.GetCollection <MessageDto>(name);

            var builder = Builders <MessageDto> .Filter;
            var filter  = builder.Empty;

            if (!string.IsNullOrEmpty(queryDto.StatusName))
            {
                filter = filter & builder.Eq(x => x.StatusName, queryDto.StatusName);
            }

            if (!string.IsNullOrEmpty(queryDto.Name))
            {
                filter = filter & builder.Eq(x => x.Name, queryDto.Name);
            }

            if (!string.IsNullOrEmpty(queryDto.Group))
            {
                filter = filter & builder.Eq(x => x.Group, queryDto.Group);
            }

            if (!string.IsNullOrEmpty(queryDto.Content))
            {
                filter = filter & builder.Regex(x => x.Content, ".*" + queryDto.Content + ".*");
            }

            var result = collection
                         .Find(filter)
                         .SortByDescending(x => x.Added)
                         .Skip(queryDto.PageSize * queryDto.CurrentPage)
                         .Limit(queryDto.PageSize)
                         .ToList();

            return(result);
        }