protected override IStream <TOut> CreateOutputStream(LookupEntityFrameworkCoreArgs <TIn, TEntity, TCtx, TOut, TKey> args) { var matchingS = args.InputStream.Observable.CombineWithLatest(args.DbContextStream.Observable.Map(ctx => { return(new EfMatcher <TIn, TEntity, TCtx, TKey>(new EfMatcherConfig <TIn, TEntity, TCtx, TKey> { Context = ctx, CreateIfNotFound = args.CreateIfNotFound, DefaultDatasetCriteria = args.DefaultCriteria, LeftKeyExpression = args.GetLeftStreamKey, RightKeyExpression = args.GetEntityStreamKey, MinCacheSize = args.CacheSize, GetFullDataset = args.GetFullDataset, IncludeInstruction = args.IncludeInstruction })); }), (elt, matcher) => new { Element = elt, Matcher = matcher }, true) .Map(i => { TEntity entity = default(TEntity); this.ExecutionContext.InvokeInDedicatedThread(i.Matcher.Context, () => entity = i.Matcher.GetMatch(i.Element)); return(args.ResultSelector(i.Element, entity)); }); return(base.CreateUnsortedStream(matchingS)); }
protected override IStream <TOut> CreateOutputStream(LookupEntityFrameworkCoreArgs <TIn, TEntity, TCtx, TOut> args) { var matcher = new EfMatcher <TIn, TEntity, TCtx>(args.Match, args.CacheSize); var matchingS = args.InputStream.Observable.CombineWithLatest(args.DbContextStream.Observable, (elt, ctx) => new { Element = elt, DbContext = ctx }, true) .Map(i => args.ResultSelector(i.Element, matcher.GetMatch(i.DbContext, i.Element))); return(base.CreateUnsortedStream(matchingS)); }
public LookupEntityFrameworkCoreStreamNode(string name, LookupEntityFrameworkCoreArgs <TIn, TEntity, TCtx, TOut, TKey> args) : base(name, args) { }