Link to home
Start Free TrialLog in
Avatar of Sailing_12
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.

            
             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();

Open in new window


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

Open in new window


Thanks
ASKER CERTIFIED SOLUTION
Avatar of Sailing_12
Sailing_12

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Avatar of Sailing_12
Sailing_12

ASKER

Needed to add the where isprimary = true to the .selectmany instead of on the main query.