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; })); }
// 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; })); }
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); } }