'IIf' is a function and all calls to this function will have all arguments evaluated upon calling the function - this is true for all function calls, not just 'IIf'.
In VB9, you can use the new ternary conditional operator 'If':
e.g., If(waa.HasValue, waa.Value.ToString(), "")
Convert between VB, C#, C++, and Java (http://www.tangiblesoftwaresolutions.com)