public async Task <PagedResponse <Room> > GetRoomsPagedAsync(RoomFilter filter) { var _key = $"name={filter.Name}&rate={filter.Rate}&pageindex={filter.PageIndex}&rowsperpage={filter.RowsPerPage}"; List <RoomEntity> dbRecords = null; if (!_memCache.TryGetValue(CacheKeys.GetCacheKeyRoomList(_key), out dbRecords)) { var cacheOptions = new MemoryCacheEntryOptions { AbsoluteExpiration = DateTime.Now.AddMinutes(1), // SlidingExpiration = DateTime.Now.AddMinutes(1) Priority = CacheItemPriority.Normal }; var entityData = await filter.ApplyTo(_dbContext.Rooms).ToListAsync(); if (entityData.Any()) { dbRecords = entityData; _memCache.Set(CacheKeys.GetCacheKeyRoomList(_key), dbRecords, cacheOptions); } } dbRecords = dbRecords ?? new List <RoomEntity>(); var rooms = dbRecords.Select(room => _mapper.Map <Room>(room)).ToList(); PagedResponse <Room> pageResponse = new PagedResponse <Room> { Data = rooms, Links = new Links { NextPage = string.Concat(filter.RouteName, _urlHelper.RouteUrl(filter.NextRouteValues)), PreviousePage = string.Concat(filter.RouteName, _urlHelper.RouteUrl(filter.PreviousRouteValues)) } }; return(pageResponse); /* * // Filtering Logic1 * // Func<RoomFilter, IQueryable<RoomEntity>> Filtering = (model) => * // { * // return _dbContext.Rooms.AsQueryable().Where(room => room.Name.StartsWith(model.Name)); * // }; * * // var fiteredData = await Filtering(filter).ToListAsync(); * * // Filtering Logic2 * var roomEntities = await filter.ApplyTo(_dbContext.Rooms).ToListAsync(); * var rooms = roomEntities.Select(room => _mapper.Map<Room>(room)).ToList(); * * // Paging * PagedResponse<Room> pageResponse = new PagedResponse<Room> * { * Data = rooms, * Links = new Links * { * NextPage = string.Concat(filter.RouteName, _urlHelper.RouteUrl(filter.NextRouteValues)), * PreviousePage = string.Concat(filter.RouteName, _urlHelper.RouteUrl(filter.PreviousRouteValues)) * } * }; * * return pageResponse; */ }