public static async Task <IEnumerable <T> > TakePageAsync <T>(this IAzureTableStorage <T> tableStorage, string partitionKey, int pageNo, int itemsInPage, Func <T, bool> filter = null) where T : class, ITableEntity, new() { var result = new List <T>(); var fromNo = -itemsInPage * pageNo; await tableStorage.EnumerateDataByChunksAsync(partitionKey, chunk => { foreach (var item in chunk.Where(itm => filter == null || filter(itm))) { if (fromNo >= 0) { result.Add(item); if (result.Count >= itemsInPage) { return(false); } } fromNo++; } return(true); }); return(result); }