public virtual bool TryCreate <TIn, TOut>(IQuerySpecification <TIn, TOut> specification, out IQueryTransform <TIn, TOut> transform)
        {
            if (_transformFactories.TryGetValue(specification.Name, out var factories))
            {
                foreach (var factory in factories)
                {
                    if (factory.TryCreate(specification, out transform))
                    {
                        return(true);
                    }
                }
            }

            transform = null;
            return(false);
        }
        public virtual bool TryCreate <TIn, TOut>(IQuerySpecification <TIn, TOut> specification, out IQueryTransform <TIn, TOut> transform)
        {
            if (specification is SelectQuerySpecification <TIn, TOut> selectSpec)
            {
                transform = new SelectQueryTransform <TIn, TOut>(selectSpec.Expression);
                return(true);
            }

            transform = null;
            return(true);
        }
 public ChainQueryTransform(IQueryPipe <TIn> inputPipe, IQueryPipe <TOut> outputPipe, IQueryTransform <TIn, TOut> transform)
 {
     _inputPipe  = inputPipe ?? throw new ArgumentNullException(nameof(inputPipe));
     _outputPipe = outputPipe ?? throw new ArgumentNullException(nameof(outputPipe));
     _transform  = transform ?? throw new ArgumentNullException(nameof(transform));
 }