Junte-se ao LINQ no topo 1

Eu tenho três objetos (splistitemcollection) que estou juntando, o que está funcionando muito bem, mas o problema que estou tendo é que há um relacionamento entre muitos entre o objeto de um contrato e o objeto de clientes. Preciso pegar apenas o primeiro objeto de clientes para cada objeto de contrato durante a associação.

Aqui está o que estou recebendo

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

Aqui está o que eu quero 12345 (apenas um dos clientes, Jane ou John)

Aqui está o código que estou usando atualmente.

  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);

No SQL, eu definiria uma cláusula select top em uma subconsulta definida na minha associação, apenas não consigo entender a sintaxe do meu cérebro 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);

questionAnswers(3)

yourAnswerToTheQuestion