コード例 #1
0
        FindPosts(this IDataFacade dataFacade, int?region, int?userId, int page, int itemsPerPage)
        {
            if (dataFacade == null)
            {
                throw new ArgumentNullException(nameof(dataFacade));
            }
            if (page < 0)
            {
                throw new ArgumentOutOfRangeException(nameof(page));
            }
            if (itemsPerPage <= 0)
            {
                throw new ArgumentOutOfRangeException(nameof(itemsPerPage));
            }

            // 构造查询
            var query = dataFacade.Posts
                        .AsNoTracking()
                        .Where(e => e.IsRemoved == false);

            if (region != null)
            {
                query = query.Where(e => e.PostRegionId == region.Value);
            }

            if (userId != null)
            {
                query = query.Where(e => e.AuthorId == userId.Value);
            }

            var indexEntities = await query.OrderByDescending(e => e.UpdateTime)
                                .Paginate(page, itemsPerPage)
                                .ToListAsync();

            var contentEntities =
                await dataFacade.FindPostContentEntities(indexEntities.Select(e => new ObjectId(e.ContentId)));

            var contentDict = contentEntities.ToDictionary(e => e.Id);

            return(indexEntities.Select(indexEntity =>
            {
                if (contentDict.TryGetValue(new ObjectId(indexEntity.ContentId), out var contentEntity))
                {
                    return (indexEntity, contentEntity);
                }
                return (indexEntity, null);
            }).ToList());
        }