title: left join selector can't access single left table name
body: <p>I am coding my way through the 101 linq examples, and I'm now at #106.</p>
  
  <p>I am trying to rewrite query expressions in method/lambda syntax for my own learning.</p>
  
  <p>Here is the example code:</p>
  
  <pre><code>List&lt;Customer&gt; customers = GetCustomerList();
  List&lt;Supplier&gt; suppliers = GetSupplierList();
  
  var custSuppliers =
      from cust in customers
      join sup in suppliers on cust.Country equals sup.Country into ss
      from s in ss.DefaultIfEmpty()
      orderby cust.CompanyName
      select new
      {
          Country = cust.Country,
          CompanyName = cust.CompanyName,
          SupplierName = s == null ? "(No suppliers)" : s.SupplierName
      };
  </code></pre>
  
  <p>Here is what I have so far:</p>
  
  <pre><code>var custSuppliers =
      customers.GroupJoin(suppliers, c =&gt; c.Country, s =&gt; s.Country, (c, s) =&gt; new { Customers = customers, Suppliers = suppliers })
          .OrderBy(i =&gt; i.Customers)
          .SelectMany(x =&gt; x.Suppliers.DefaultIfEmpty(), (x, p) =&gt;    // p is the many field (i.e. customers)
              new
              {
                  CompanyName = x.CompanyName,    // no definition for CompanyName
                  Country = p.Country,
                  SupplierName = p.SupplierName == null ? "(No suppliers)" : p.SupplierName
              });
  </code></pre>
  
  <p>My understanding is the SelectMany takes parameters X and P where X is the "left" table (i.e. there is at most 1 of them) and P is the "right" table where there might be N of them (or a null).</p>
  
  <p>But instead of the X variable holding a single customer, it holds a collection of suppliers and customers.</p>
  
  <p>Can anyone explain what is going on here?</p>