The problem is that the linq provider fetches a projection for these kind of queries, thus calls FetchProjection. This isn't a virtual method, so it will require some work.
Override FetchDataReader in a custom DataAccessAdapter class (which you also use for the LinqMetaData), and obtain the query there (the cmd, from IRetrievalQuery passed in) and don
t call the base method. Then create a NEW IDataReader implementation instance (you write that), which is simply empty and doesn't do anything, so no execution takes place.
This will make sure the linq query runs, but doesn't access the database nor will it fetch anything.
You now have the command, with sql and parameters and values, intercepted from FetchDataReader. (so store it somewhere in that method). It should be fairly straightforward from there.