I have been pondering the concept this afternoon and thinking about how it could be done. Without looking at your source code, I would assume that you do something like this:
IDataReader ExecuteReader()
{
IDbCommand command = DbConnection.CreateCommand();
command.CommandText = esQuery.RenderTheCurrentQueryToText(); <-- something like that, right?
return command.ExecuteReader();
}
what if the ExecuteReader method was static and took a (param esQuery[] )?
or what about using a decorator on the class itself?