internal static IAsyncEnumerable <TOut> _TrackEntities <TOut, TIn>(
            IAsyncEnumerable <TOut> results,
            QueryContext queryContext,
            IList <EntityTrackingInfo> entityTrackingInfos,
            IList <Func <TIn, object> > entityAccessors)
            where TIn : class
        {
            queryContext.BeginTrackingQuery();

            return(results.Select(result =>
            {
                if (result != null)
                {
                    for (var i = 0; i < entityTrackingInfos.Count; i++)
                    {
                        var entity = entityAccessors[i](result as TIn);

                        if (entity != null)
                        {
                            queryContext.StartTracking(entity, entityTrackingInfos[i]);
                        }
                    }
                }

                return result;
            }));
        }
Пример #2
0
        // ReSharper disable once InconsistentNaming
        private static IAsyncEnumerable <TOut> _TrackEntities <TOut, TIn>(
            IAsyncEnumerable <TOut> results,
            QueryContext queryContext,
            IList <EntityTrackingInfo> entityTrackingInfos,
            IList <Func <TIn, object> > entityAccessors)
            where TIn : class
        {
            queryContext.BeginTrackingQuery();

            return(_Select(
                       results,
                       result =>
            {
                if (result != null)
                {
                    for (var i = 0; i < entityTrackingInfos.Count; i++)
                    {
                        var entityOrCollection = entityAccessors[i](result as TIn);

                        if (entityOrCollection != null)
                        {
                            var entityTrackingInfo = entityTrackingInfos[i];

                            if (entityTrackingInfo.IsEnumerableTarget)
                            {
                                foreach (var entity in (IEnumerable)entityOrCollection)
                                {
                                    queryContext.StartTracking(entity, entityTrackingInfos[i]);
                                }
                            }
                            else
                            {
                                queryContext.StartTracking(entityOrCollection, entityTrackingInfos[i]);
                            }
                        }
                    }
                }

                return result;
            }));
        }
Пример #3
0
            public IEnumerator <TElement> GetEnumerator()
            {
                _queryContext.BeginTrackingQuery();

                foreach (var result in _grouping)
                {
                    if (result != null)
                    {
                        for (var i = 0; i < _entityTrackingInfos.Count; i++)
                        {
                            var entity = _entityAccessors[i](result);

                            if (entity != null)
                            {
                                _queryContext.StartTracking(entity, _entityTrackingInfos[i]);
                            }
                        }
                    }

                    yield return(result);
                }
            }