コード例 #1
0
        public async Task Execute(IEnumerable <IComplexQueryEntity> entities, CancellationToken ct)
        {
            if (entities == null)
            {
                throw new ArgumentNullException(nameof(entities));
            }

            var grouping = entities.Where(e => !(e is null)).ToList().GroupBy(e => e.QueryRequestor);

            foreach (var group in grouping)
            {
                // arrange
                var query  = new ComplexQuery(group.Key);
                var result = new ComplexQueryResult(query);
                // use cache
                var cachedEntity = group.First() as IComplexQueryCachedEntity;
                if (cachedEntity != null && cachedEntity.TryReadCache(out var cache))
                {
                    result.AddRange(cache);
                }
                else
                {
                    if (group.Key.RequestType == RequestType.PerType)
                    {
                        group.First().AdjustComplexQuery(query);
                    }
                    else
                    {
                        foreach (var entity in group)
                        {
                            entity.AdjustComplexQuery(query);
                        }
                    }

                    // fetch
                    foreach (var queryEntity in query)
                    {
                        result.AddRange(await _getListFactory(queryEntity, ct));
                    }
                    // save cache
                    cachedEntity?.SaveCache(result);
                }

                // utilize
                foreach (var entity in group)
                {
                    entity.UtilizeComplexQueryResult(result);
                }
            }
        }
コード例 #2
0
 public ComplexQueryResult(ComplexQuery query) : this(query, Enumerable.Empty <Entity>())
 {
 }
コード例 #3
0
 public ComplexQueryResult(ComplexQuery query, IEnumerable <Entity> entities) : base(entities)
 {
     Query = query ?? throw new ArgumentNullException(nameof(query));
 }
コード例 #4
0
 public ComplexQueryResult(ComplexQuery query, params Entity[] entities) : this(query, (IEnumerable <Entity>)entities)
 {
 }