У меня есть три объекта (splistitemcollection), которые я объединяю, и это прекрасно работает, но проблема в том, что между объектом контракта и объектом клиентов существует отношение один ко многим.Мне нужно получить только первый объект клиентов для каждого объекта контракта во время соединения.
Вот что я получаю
(Contract)(Customer)
12345 John Smith
12345 Jane Smith
67890 howard Jones
67890 Mary Jones
Вот то, что я хочу 12345 (только один изклиенты, джейн или джон)
Вот код, который я сейчас использую.
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);
В SQL я бы определил предложение select top в подзапросе, определенном в моем соединении, я просто не могу обернуть голову вокруг синтаксиса моего мозга новичка linq.
Окончательный результат
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);