According to this http://www.salesforce.com/us/developer/docs/apexcode/Content/apex_dynamic_soql.htm
I should be able to avoid casting using dyanmic soql
However when I try:
opportunity = 'select Name, isClosed, createdDate from opportunity where id=:oppid';
Where oppid is a String, I get
Save error: Illegal assignment from String to SOBJECT:Opportunity