Вы должны следовать связанному ответу и использовать Group Join
. Однако, так же, как вы продолжаете LEFT OUTER JOIN
в SQL после левой зависимой таблицы, вам нужно присоединиться слева как к x_PersonPhone, так и к TelephoneNumbers. И так как вы присоединитесь дважды, вы не можете просто использовать только одно ключевое слово Group
; Вы должны использовать два. Смотрите синтаксис Group By Clause здесь, в частности, конструкцию Into <alias> = Group
.
Dim people As List(Of SimplePerson)
Using gpd As New peopleDatabase()
people =
(From person In gpd.People
Join office In gpd.Offices On person.office_ref Equals office.OfficeID
Group Join personphone In gpd.x_PersonPhone On person.PersonID Equals personphone.person_ref
Into g1 = Group From personphone In g1.DefaultIfEmpty()
Group Join telephoneNumber In gpd.TelephoneNumbers On personphone.telephoneNumber_ref Equals telephoneNumber.telephoneNumberId
Into g2 = Group From telephoneNumber In g2.DefaultIfEmpty()
Where (person.preferredGivenName & " " & person.familyName).StartsWith(searchTerm) _
And telephoneNumber.x_TelephoneNumberTelephoneNumberType.FirstOrDefault().b_telephoneNumberType.telephoneNumberTypeId = 1 _
And person.active = True
Select New SimplePerson() With {
.Name = person.preferredGivenName & " " & person.familyName,
.EmailAddress = person.emailAddress,
.Title = person.jobTitle_l,
.ResId = person.sourceKey,
.OrganisationId = person.organisation_ref.Value,
.OfficeName = office.name_l,
.telephoneNumber = If(g2 Is Nothing, "No telephone", telephoneNumber.formattedNumberInternational)}
).OrderBy(Function(n) n.Name).Take(20).ToList()
End Using
Return people
Я не могу это проверить. Возможно, вам придется изменить строку в Select New SimplePerson() With { ...
с
.telephoneNumber = If(g2 Is Nothing, "No telephone", telephoneNumber.formattedNumberInternational)
на
.telephoneNumber = If(telephoneNumber Is Nothing, "No telephone", telephoneNumber.formattedNumberInternational)
Если это сработает, пожалуйста, дайте мне знать, и я обновлю ответ.