How to make this ASP.NET MVC ViewModel population query efficient?
It's hard to tell exactly how to write this query without knowing exactly what your datamodel look like and how you've set it up. An assumption was made you're using Linq 2 SQL, I'll adhere to that assumption unless we hear otherwise. You can eagerly fetch other tables if you tell linq to sql to do so. You use the Include method for that.
If you've set up your datamodel correctly, you should be able to create a query that resembles this:
string userName = User.Identity.Name;
List&lt;RequestExecutionViewModel&gt; = (from request in db.Requests.Include(&quot;Requests.ExecutionStatus&quot;).Include(&quot;Requests.Rules.Approvals&quot;);
    where  request.UserName == userName
    select new RequestExecutionViewModel(){
        Request = request,
        ExecutionStatus = request.ExecutionStatus,
        Approvals = request.Rule.Approvals
    }).ToList();

And as you can see, this query instructs Linq-to-SQL to eagerly fetch the to related tables and then uses them in the output shaping process to create your viewmodel directly..
Make sure you look at the profiler to see that this is actually resulting in one query. Linq-to-SQL can at any time decide to loop over the subresults by itself.