title: C# 6 null conditional operator does not work for LINQ query
body: <p>I expected this to work, but apparently the way the IL generates, it throws <code>NullReferenceException</code>. Why can't the compiler generate similar code for queries? </p>
  
  <p>In the <code>ThisWorks</code> case, the compiler generates code that short circuits the rest of the expression, why can't it do the same thing for LINQ query case?</p>
  
  <pre><code>class Target
  {
      public ChildTarget Child;
  }
  
  class ChildTarget
  {
      public int[] Values;
  }
  
  IEnumerable&lt;int&gt; ThisWorks(Target target) =&gt;
      target.Child?.Values.Select(x =&gt; x);
  
  IEnumerable&lt;int&gt; ThisDoesNotWork(Target target) =&gt;
      from x in target.Child?.Values select x;
  
  ThisWorks(new Target());
  ThisDoesNotWork(new Target()); // this throws NullReferenceException
  </code></pre>
  
  <p>Decompiled results</p>
  
  <pre><code>private static IEnumerable&lt;int&gt; ThisDoesNotWork(Target target)
  {
      ChildTarget child = target.Child;
      IEnumerable&lt;int&gt; values = (child != null) ? child.Values : null;
      Func&lt;int, int&gt; func;
      if ((func = Program._func) == null)
      {
          func = (Program._func = new Func&lt;int, int&gt;(Program._funcMethod));
      }
      return values.Select(func);
  }
  
  private static IEnumerable&lt;int&gt; ThisWorks(Target target)
  {
      ChildTarget child = target.Child;
      IEnumerable&lt;int&gt; values;
      if (child == null)
      {
          values = null;
      }
      else
      {
          IEnumerable&lt;int&gt; values = child.Values;
          Func&lt;int, int&gt; func;
          if ((func = Program._func2) == null)
          {
              func = (Program._func2= new Func&lt;int, int&gt;(Program._funcMethod2));
          }
          values = values.Select(func);
      }
      return values;
  }
  </code></pre>