2017-04-22 10 views
1

우리 프로젝트에서 Servietack과 OrmLite를 사용합니다. 요청 (Db.Select)이 전송되면 많은 시간이 지나면 응답이 반환되지 않습니다.OrmLite db.Select not return response

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

일을?

답변

2

을 호출하면 List<News>이 반환되어 전체 표 결과가 메모리 목록 모음으로 다운로드됩니다. 이 페이지에 대신 OrmLite가 실행하는 SqlExpression을 구축 할 필요가 결과 집합을 시도하고 있기 때문에에만 관심있는 결과, 예를 들어 반환 : 사람

//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 
}); 
+0

덕분에, 어떻게 들어, 중첩 된 객체에서 조회 할 수 있습니다 예 = var q = Db. () .Where (o => o.Feed.Category.CategoryId == 10); – AmirHossein

+0

@AmirHossein 제발 코멘트에 코드를 넣지 마십시오. 새로운 질문을 할 수 있습니까? – mythz

+0

나는 내 대답을 찾았습니다. http://stackoverflow.com/questions/8616516 – AmirHossein