/// <summary> /// 分页查询评论 /// </summary> /// <param name="exId">兑换Id</param> /// <param name="userId">登录用户id</param> /// <param name="pageIndex">当前页</param> /// <param name="pageSize">每页数据数</param> /// <returns></returns> public async Task <(PageDto pageDto, List <ExchangeReplyDto> dtoList)> FindListAsync(int exId, int userId, int pageIndex, int pageSize) { var isLike = new Func <string, string, bool>((s, b) => !string.IsNullOrWhiteSpace(s) && s.Split(",", StringSplitOptions.RemoveEmptyEntries) .Contains(b)); /*SELECT m.Portrait,m.nickname,er.Text,er.AddTime,er.LikeNum,m2.nickname,er2.UserId FROM dbo.sns_exchangeReply er * LEFT JOIN dbo.cos_member m ON m.User_id=er.UserId * LEFT JOIN sns_exchangeReply er2 ON er2.Id=er.ParentId * LEFT JOIN dbo.cos_member m2 ON m2.User_id=er2.UserId*/ var v = from er in this.DbContext.ExchangeReplies join m in this.DbContext.Members on er.UserId equals m.Id into mi from m in mi.DefaultIfEmpty() join er2 in this.DbContext.ExchangeReplies on er.ParentId equals er2.Id into er2i from er2 in er2i.DefaultIfEmpty() join m2 in this.DbContext.Members on er2.UserId equals m2.Id into m2i from m2 in m2i.DefaultIfEmpty() where er.ExId == exId orderby er.AddTime descending select new ExchangeReplyDto() { Id = er.Id, ExId = er.ExId, UserId = er.UserId, Portrait = m.Portrait, Nickname = m.Nickname, Text = er.Text, AddTime = SysHelper.GetDateInterval(er.AddTime.ToString(CultureInfo.InvariantCulture)), LikeNum = er.LikeNum, IsLike = isLike(er.LikeUser, userId.ToString()), ReplyUserId = er2 == null ? 0 : er2.UserId, ReplyNickname = m2.Nickname ?? "" }; int totalRecord = await v.CountAsync(); int pageCount = Convert.ToInt32(Math.Ceiling(totalRecord / Convert.ToDouble(pageSize))); int prevPage = pageIndex > 0 ? pageIndex - 1 : 0; int nextPage = pageIndex < pageCount ? pageIndex + 1 : 0; var pageDto = new PageDto() { TotalRecord = totalRecord, PageCount = pageCount, NextPage = nextPage, PrevPage = prevPage, PageSize = pageSize, PageIndex = pageIndex }; var erList = await v.Skip((pageIndex - 1) *pageSize).Take(pageSize).ToListAsync(); return(pageDto, erList); }