private Expression ConvertMethodReference(IType expectedType, Expression argument)
        {
            var expectedCallable = expectedType as ICallableType;

            if (expectedCallable != null)
            {
                var argumentType = (ICallableType)GetExpressionType(argument);
                var expectedSig  = expectedCallable.GetSignature();
                var argSig       = argumentType.GetSignature();
                if (argSig != expectedSig)
                {
                    if (TypeSystemServices.CompatibleSignatures(argSig, expectedSig) ||
                        (TypeSystemServices.CompatibleGenericSignatures(argSig, expectedSig) /*&& IsUnspecializedGenericMethodReference(argument)*/)
                        )
                    {
                        argument.ExpressionType = expectedType;
                        return(CreateDelegate(expectedType, argument));
                    }
                    return(Adapt(expectedCallable, CreateDelegate(GetConcreteExpressionType(argument), argument)));
                }
                return(CreateDelegate(expectedType, argument));
            }
            return(CreateDelegate(GetConcreteExpressionType(argument), argument));
        }