Разбираясь с Windows Azure Mobile Service, наткнулся на очень интересный нюанс: при запросе данных с помощью метода
IMobileServiceTable<T>.ToListAsync (и других аналогичных методов соответствующего интерфейса) количество возвращаемых записей (по умолчанию) не превышает 50! (Более подробно можно прочитать
здесь).
Example:
var mobileServiceTable = App.MobileService.GetTable<SomeObject>();
var cloudList = await mobileServiceTable.OrderBy(obj => obj.SomeProperty).ToListAsync();
var count = 0;
foreach (var item in cloudList)
{
count++;
}
Debug.WriteLine(count);
Если кол-во объектов SomeObject > 50, count все равно будет равен 50
То есть для того, чтобы получить 150 записей, нужно использовать метод
IMobileServiceTable<T>.Take и непосредственно указывать нужное количество. А если это количество заранее не известно? К примеру, нужно синхронизировать базу данных в облаке с локальной копией.
Чтобы узнать общее количество записей, потребуется интерфейс
ITotalCountProvider, используя который можно получить количество всех записей, возвращаемых запросом.
Example:
var mobileServiceTable = App.MobileService.GetTable<SomeObject>();
var cloudList = await mobileServiceTable.OrderBy(obj => obj.SomeProperty).IncludeTotalCount().ToListAsync();
var countProvider = cloudList as ITotalCountProvider;
Debug.WriteLine(countProvider.TotalCount);
var count = 0;
foreach (var item in cloudList)
{
count++;
}
Debug.WriteLine(count);
Однако, это не решает проблему, так как переменная count будет по прежнему равно 50 (хотя TotalCount = 150).