LINQ Присоединяйтесь к началу 1
У меня есть три объекта (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);