Tengo tres objetos (splistitemcollection) que estoy uniendo entre sí, que funciona muy bien, pero el problema que tengo es que hay una relación de uno a muchos entre el objeto de un contrato y un objeto de los clientes. Necesito obtener solo el primer objeto del cliente para cada objeto del contrato durante la unión.LINQ Únete en la parte superior 1
Aquí es lo que estoy haciendo
(Contract)(Customer) 12345 John Smith 12345 Jane Smith 67890 howard Jones 67890 Mary Jones
Aquí es lo que quiero 12345 (sólo uno de los clientes, Jane o John)
Aquí está el código im 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 i definiría una cláusula de selección de la parte superior en una sub consulta definido en mi unirse, simplemente no puedo hacerme a 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);
Gracias a todos por la ayuda. Usando el concepto de grupo, pude obtener los resultados que necesitaba. De hecho, moví el grupo de un enunciado separado a en línea en la consulta. Aquí estaban los resultados –