LINQ Join on Top 1
Ich habe drei Objekte (splistitemcollection), die zusammengefügt werden, was großartig funktioniert, aber das Problem ist, dass es eine Eins-zu-viele-Beziehung zwischen einem Vertragsobjekt und einem Kundenobjekt gibt. Ich muss nur das erste Kundenobjekt für jedes Vertragsobjekt während des Joins abrufen.
Hier ist was ich bekomme
(Contract)(Customer) 12345 John Smith 12345 Jane Smith 67890 howard Jones 67890 Mary Jones
Hier ist was ich will 12345 (nur einer der Kunden, Jane oder John)
Hier ist der Code, den ich gerade benutze.
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);
In SQL würde ich eine ausgewählte Top-Klausel in einer Unterabfrage definieren, die in meinem Join definiert ist. Ich kann meinen Kopf nicht um die Syntax für mein neues Linux-Gehirn legen.
Endergebni
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);