Sailing_12
asked on
Linq/Lambda left join
Hello... new to linq lambda - what is wrong with my query? - I get 'sequence contains no elements' error when there are no providerSpecialties records for the given provider.
This should behave like a left join from the provider entity.
In SQL I would write:
Thanks
This should behave like a left join from the provider entity.
return DBContext.Provider.GroupJoin(DBContext.ProviderSpecialties,
p => p.providerId, ps => ps.providerSpecialtyId, (p, ps) => new { Provider = p, ProviderSpecialties = ps.DefaultIfEmpty()})
.SelectMany(a => a.ProviderSpecialties
.Select(b => new { Provider = a.Provider, ProviderSpecialties = b }))
.Where(w => w.ProviderSpecialties.isPrimary == true)
.Where (w => w.Provider.providerId == providerId)
.Select(m => new ProviderDetail
{
providerId = m.Provider.providerId,
NPI = m.Provider.NPI,
licenseNumber = m.Provider.licenseNumber,
licenseExpiration = m.Provider.licenseExpiration,
licenseStateId = m.Provider.licenseState,
licenseStateName = m.Provider.State.abbreviation,
networkLevelId = m.Provider.networkLevel,
networkLevelName = m.Provider.NetworkLevel1.name,
firstName = m.Provider.firstName,
lastName = m.Provider.lastName,
title = m.Provider.title,
birthDate = m.Provider.birthDate,
sex = m.Provider.sex,
primarySpecialtyId = m.ProviderSpecialties.Specialty.specialtyId,
referrable = m.Provider.referrable,
photoUrl = m.Provider.photoUrl,
emailAddress = m.Provider.emailAddress,
websiteUrl = m.Provider.websiteUrl,
recordStatus = m.Provider.recordStatus
}).Single();
In SQL I would write:
select p.*, ps.specialtyId, ps.specialtyName
from provider p
left join providerspecialties ps
on ps.providerId = p.providerId
and ps.isPrimary = 1
left join Specialty s
on ps.specialtyId = s.specialtyId
Thanks
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER