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