internal QueryEndpoint(QueryEndpoint outerEndpoint, IQueryRootBuilder queryRootBuilder) { ArgumentValidator.EnsureArgumentNotNull(outerEndpoint, "outerEndpoint"); ArgumentValidator.EnsureArgumentNotNull(queryRootBuilder, "queryRootBuilder"); Provider = outerEndpoint.Provider; session = outerEndpoint.session; RootBuilder = queryRootBuilder; }
/// <summary> /// Overrides current query root builder (i.e. builder of <see cref="QueryEndpoint.All{T}"/> expression). /// After this method is called <see cref="Query"/> is changed to a new <see cref="QueryEndpoint"/> /// that utilizes specified <paramref name="queryRootBuilder"/>. /// </summary> /// <param name="queryRootBuilder"><see cref="IQueryRootBuilder"/> to use.</param> /// <returns><see cref="IDisposable"/> implementor /// that reverts <see cref="IQueryRootBuilder"/> to original /// once <see cref="IDisposable.Dispose"/> is called.</returns> public IDisposable OverrideQueryRoot(IQueryRootBuilder queryRootBuilder) { ArgumentValidator.EnsureArgumentNotNull(queryRootBuilder, "queryRootBuilder"); var oldQuery = Query; var newQuery = new QueryEndpoint(oldQuery, queryRootBuilder); Query = newQuery; return(new Disposable(_ => Query = oldQuery)); }