OrmLite db.Select 没有 return 响应

OrmLite db.Select not return response

我在项目中使用 Servietack 和 OrmLite。发送请求(Db.Select)时,过了很久,没有响应return.

       public object Get(GetCategoryNews request)
        {
            var PageCount = 20;
            var skip = (request.Page.GetValueOrDefault(1) - 1) * PageCount;

            var cacheKey = UrnId.Create<GetCategoryNews>(DateTime.Now.ToString("yyMMddhhmm") + skip);
            return base.Request.ToOptimizedResultUsingCache(base.Cache, cacheKey, () =>
            {
            //On this line, waiting and no response
              var status = Db.Select<News>().Skip(skip).Take(PageCount).Select(o => new NewsResponse() {
                    Id = o.Id,
                    CreateOn = o.CreateOn,
                    Description = o.Description,
                    PublishOn = o.PubDate,
                    Title = o.Title
                });
                return status;
            });
        }

但是当计数请求时,它工作得很好

    var count = Db.Count<News>();

我该如何解决这个问题?

调用 Db.Select<News>() return 的 List<News> 会将整个 table 结果下载到内存列表集合中。由于您正在尝试对结果集进行分页,因此您需要构建一个 SqlExpression OrmLite 只执行 return 您感兴趣的结果,例如:

//Create SQL Query
var q = db.From<News>()
          .Skip(skip)
          .Take(PageCount);

var results = db.Select(q); //Executes paged query
return results.Select(o => new NewsResponse {
    Id = o.Id,
    CreateOn = o.CreateOn,
    Description = o.Description,
    PublishOn = o.PubDate,
    Title = o.Title
});