Edit: mostly solved below. However, one other thing I'd be curious about (to improve google-fu in the future is - how would your phrase this question? I'm aware my title is a bit weird but could not think of a more concise way to summarise it. Suggestions in comments are welcome.
Suppose my workflow involves a potentially expensive selection. At runtime I'd like to be able to choose whether or not to make this parallel.
To explain better. Consider this query (broken code - do-what-i-want-not-what-i-say):
void Main()
{
    bool runTimeParallelOption = false; // assume this option comes from e.g. user/config
    var j = Enumerable.Range(1,5);
    if (runTimeParallelOption)
        j = j.AsParallel();
    var results = j.Select(x => 
    {
        Thread.Sleep(1000);
        return new { Number = x, Square = x * x };
    });
    var sw = Stopwatch.StartNew();
    foreach (var result in results)
        Console.WriteLine(result.Square);
        Console.WriteLine("Elapsed: : " + sw.Elapsed);
}
The hope here is that if runTimeParallelOption is set, it would make the query parallel. However obviously (in hindsight!) this doesn't work because the Type of j means I am still executing the IEnumerable extension method.
The fix for this is trivial if you don't mind refactoring to make { Number = x, Square = x * x } a first-class Type, but this isn't very appealling to me. Is there a way to have my cake and eat it?