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()); }