private Expression <Func <IMockDatabase, TReturn> > ModifySqlParametersArgumentInExpression <TReturn>(Expression <Func <IMockDatabase, TReturn> > expression)
        {
            var visitor       = new MatchAnonymousObjectExpressionVisitor();
            var newExpression = (Expression <Func <IMockDatabase, TReturn> >)visitor.Visit(expression);

            return(newExpression);
        }
        public bool CommandMatchesExpression(MockDbCommand command)
        {
            var visitor           = new MatchAnonymousObjectExpressionVisitor();
            var comparisonVisitor = (MethodCallExpression)visitor.Visit(methodCallExpression);

            var call = comparisonVisitor.Method.GetParameters()
                       .Zip(comparisonVisitor.Arguments, (methodArg, callArg) => new { methodArg, callArg })
                       .ToDictionary(a => a.methodArg, a => a.callArg);

            var expectedParameters = command.GetParameterLookup();
            var parameterValues    = from arg in call
                                     let match = ResolveToMatch(arg.Value as MethodCallExpression)
                                                 let paramValue = expectedParameters.ContainsKey(arg.Key.Name)
                    ? expectedParameters[arg.Key.Name]
                    : null
                                                                  select new { arg, matches = match.Matches(paramValue) };

            return(parameterValues.All(a => a.matches));
        }