LINQ Join on top 1

У меня есть три объекта (splistitemcollection), которые я объединяю вместе, что отлично работает, но проблема, с которой я столкнулся, заключается в том, что существует отношение "один ко многим" между объектом контракта и объектом клиента. Мне нужно получить только первый объект клиентов для каждого объекта контракта во время соединения.

Вот что я получаю

(Contract)(Customer)
12345  John Smith
12345  Jane Smith
67890  howard Jones
67890  Mary Jones

Вот что я хочу У меня есть три объекта (splistitemcollection), которые я объединяю вместе, что отлично работает, но проблема, с которой я сталкиваюсь, заключается в том, что между объектом контракта и объектом контракта существует связь один-ко-многим ...

У меня есть три объекта (splistitemcollection ), что я объединяюсь, что отлично работает, но проблема, с которой я столкнулся, заключается в том, что между объектом контракта и объектом клиента существует связь один-ко-многим. Мне нужно получить только первый объект клиентов для каждого объекта контракта во время соединения.

Вот что я получаю

(Contract)(Customer)
12345  John Smith
12345  Jane Smith
67890  howard Jones
67890  Mary Jones

Вот что я хочу У меня есть три объекта (splistitemcollection), которые я объединяю вместе, что отлично работает, но проблема, с которой я сталкиваюсь, заключается в том, что между объектом контракта и объектом контракта существует связь один-ко-многим ...

У меня есть три объекта (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);
5
задан Gabe 25 October 2010 в 14:35
поделиться