티스토리 뷰

반응형

에저 모바일 서비스에서는 기본적으로 한번 조회시에 50의 레코드만을 조회하도록 설정되어 있다.

하지만, 한번에 내가 원하는 모든 데이터를 조회하는 것이 필요해서, 찾아보다가 아래 포스트를 발견해서 사용해 보았는데 매우 만족스러운 결과를 보여준다.

 

참고 포스트

Retrieving more data from Azure Mobile Services using paging and LoadAllAsync extension

http://blogs.msdn.com/b/kevinash/archive/2013/02/13/retrieving_2d00_more_2d00_data_2d00_from_2d00_azure_2d00_mobile_2d00_services_2d00_using_2d00_paging.aspx?CommentPosted=true#commentmessage

 

자세한 설명은 하지 않도록 하겠다. 다만, 약간의 수정이 필요하기 때문에 포스트를 하게 되었다. 그리고, 이 내용으로 확장 메소드를 만들면 사용하기가 매우 편리하다.

 

 

        public static async Task<List<T>> LoadAllAsync<T>(this IMobileServiceTableQuery<T> table, int bufferSize = 1000)
        {
           
            IMobileServiceTableQuery<T> query = table.IncludeTotalCount();
            IEnumerable<T> results = await query.ToEnumerableAsync();
            long count = ((ITotalCountProvider) results).TotalCount;
            if (results != null && count > 0)
            {
                var updates = new List<T>();
                while (updates.Count < count)
                {
                    List<T> next = await query.Skip(updates.Count).Take(bufferSize).ToListAsync();
                    updates.AddRange(next);
                }
                return updates;
            }

            return null;
        }

 

위의 소스 코드 중 굵은 글씨 부분이 포스트와 다른 부분이다. 이전 버전 SDK에는 존재 했던 것 같은지 현재는 위의 이름으로 사용해야 한다.

 

 

실제 사용

                var allCodes = await PublicHelper.Instance.CodeTable
                    .Where(p => p.ClassName == "MainCategory" || p.ClassName == "SubCategory")
                    .LoadAllAsync();

 

 

테이블 쿼리를 만든 후 마지막에 LoadAllAsync()를 붙여 주기만 하면 쿼리 조건에 해당하는 모든 데이터를 불러 올 수 있다.

 

반응형
댓글