コード例 #1
0
        private static async Task <List <object> > ExecuteWithReplacementsAsync(FieldReplacementProcessor <TItem> replacementProcessor, IQueryable dynamicQueryable, ForEachAsyncDelegate <object> forEachAsync)
        {
            var dynamicType   = dynamicQueryable.ElementType;
            var returnObjects = new List <object>();

            if (dynamicQueryable.IsInMemory())
            {
                await ItemQueryHelper.DefaultForEachAsync(dynamicQueryable, AddObjectToList);
            }
            else
            {
                await forEachAsync(dynamicQueryable.AsObjects(), AddObjectToList);
            }

            void AddObjectToList(object dynamicObj)
            {
                if (dynamicObj != null)
                {
                    replacementProcessor.Replace(dynamicObj, dynamicType);
                }

                returnObjects.Add(dynamicObj);
            }

            return(returnObjects);
        }
コード例 #2
0
        /// <summary>
        /// Executes a query that selects only the desired fields from an <see cref="IQueryable{TItem}"/>.
        /// </summary>
        public async Task <QueriedDataIterator> SelectFieldsOnlyAsync(IQueryable <TItem> items, ForEachAsyncDelegate <object> forEachAsync)
        {
            Type       dynamicType      = GetDynamicRuntimeType();
            IQueryable dynamicQueryable = GetDynamicQueryable(items, dynamicType);

            var replacementProcessor = new FieldReplacementProcessor <TItem>(_fieldReaders);
            await replacementProcessor.LoadAllAsync(items);

            List <object> dynamicObjects = await ExecuteWithReplacementsAsync(replacementProcessor, dynamicQueryable, forEachAsync);

            return(new QueriedDataIterator(dynamicObjects));
        }
コード例 #3
0
        public async Task <RestItemData> SelectFieldsOnlyAsync(TItem item)
        {
            Type   dynamicType = GetDynamicRuntimeType();
            object dynamicObj  = GetDynamicObject(item, dynamicType);

            if (dynamicObj == null)
            {
                return(null);
            }

            IQueryable <TItem> items = new[] { item }.AsQueryable();
            var replacementProcessor = new FieldReplacementProcessor <TItem>(_fieldReaders);
            await replacementProcessor.LoadAllAsync(items);

            replacementProcessor.Replace(dynamicObj, dynamicType);

            return(new RestItemData(dynamicObj));
        }