Exemple #1
0
        //
        // AsyncDbListBase core methods implementation

        /// <summary>
        ///   Fully load lazy loaded items.
        /// </summary>
        protected override async Task DoFurtherLoadAsync()
        {
            IEnumerable <Card> cards;
            HashSet <int>      cardsId;

            lock (LockObject)
            {
                cards =
                    Objects.Skip(GetFurtherLoadedIndex())
                    .Take(
                        Math.Max(Index - GetFurtherLoadedIndex(), 0) + IncrementalFurtherLoadMax
                        - IncrementalFurtherLoadMin);

                cardsId = new HashSet <int>(cards.Select(c => c.Id));
            }

            IEnumerable <Card> updateCards =
                await
                Db.Table <Card>()
                .FurtherLoad(LazyLoader)
                .Where(c => cardsId.Contains(c.Id))
                .ToListAsync()
                .ConfigureAwait(false);

            lock (LockObject)
            {
                foreach (Card card in cards)
                {
                    LazyLoader.UpdateFromFurtherLoad(
                        card, updateCards.FirstOrDefault(uc => uc.Id == card.Id));
                }

                FurtherLoadedIndex = FurtherLoadedIndex + updateCards.Count();
            }
        }