LINQ Únete en la parte superior 1

Tengo tres objetos (splistitemcollection) que estoy uniendo, lo que funciona muy bien, pero el problema que tengo es que hay una relación de uno a muchos entre un objeto de contrato y un objeto de clientes. Necesito tomar solo el primer objeto de clientes para cada objeto de contrato durante la unión.

Esto es lo que estoy obteniendo

(Contract)(Customer)
12345  John Smith
12345  Jane Smith
67890  howard Jones
67890  Mary Jones

Esto es lo que quiero 12345 (solo uno de los clientes, Jane o John)

Aquí está el código que estoy usando actualmente.

  var joinedResults = from SPListItem contracts in _contractList
                      join SPListItem customers in _customerList
                      on contracts["ContractNumber"] equals customers["ContractNumber"]  
                      join SPListItem loans in _loanList
                      on contracts["ContractNumber"] equals loans["Contract_x0020_Number"] 
                      into l from loans in l.DefaultIfEmpty()
                      select new MergedData(contracts, customers, loans);

En SQL, definiría una cláusula top select en una subconsulta definida en mi unión, simplemente no puedo entender la sintaxis de mi cerebro novato linq.

Resultado final

  var joinedResults = from SPListItem contracts in _contractList
      join SPListItem customers in 
      // Derived subset
        (from SPListItem customers in _customerList
        group customers by customers["ContractNumber"] into groupedCustomers 
        select groupedCustomers.FirstOrDefault()
      )  on contracts["ContractNumber"] equals customers["ContractNumber"]  
      join SPListItem loans in _loanList
      on contracts["ContractNumber"] equals loans["Contract_x0020_Number"] into l
      from loans in l.DefaultIfEmpty()
      select new MergedData(contracts, customers, loans);

Respuestas a la pregunta(3)

Su respuesta a la pregunta