Reputation: 2748
I'm trying to join a few tables together in Entity Framework. One of the relationships of the table is a One-To-Many relationship.
E.g. The object Person has a list of the object DATA, but when I include the table in entity framework, it only returns single item of DATA in my select clause.
The query looks like this:
from persoon in PagedView.Context.PERSOON
join verhuring in PagedView.Context.VERHURINGEN
.Where(
x => x.DatumGeldigTot == null || x.DatumGeldigTot >= OverzichtPersonenSearch.ReferentieDatum)
on persoon.ComputerNr equals verhuring.PersoonsID into a
from verhuring in a.DefaultIfEmpty()
join eenheid in PagedView.Context.EENHEID
on verhuring.Eenheid equals eenheid.ComputerNr into b
from eenheid in b.DefaultIfEmpty()
join data in PagedView.Context.DATA
on persoon.ComputerNr equals data.COMPUTERNR into c
from data in c.DefaultIfEmpty()
select new PersoonDto
{
ComputerNr = persoon.ComputerNr,
EIGENREF = persoon.EIGENREF,
NAAM = persoon.NAAM,
ADRES = persoon.ADRES,
LANDCODE = persoon.LANDCODE,
POSTNR = persoon.POSTNR,
TELEFOON = persoon.TELEFOON,
EMAIL = persoon.EMAIL,
RIJKSREGISTER = persoon.RIJKSREGISTER,
SOORT_PERSOON = persoon.SOORT_PERSOON,
GESLACHT = persoon.GESLACHT,
DATUM = persoon.DATUM,
FAMILIENAAM = persoon.FAMILIENAAM,
VOORNAAM = persoon.VOORNAAM,
STRAAT = persoon.STRAAT,
NR = persoon.NR,
BUSNR = persoon.BUSNR,
Website = persoon.Website,
IsActief = persoon.IsActief,
Verhuringen = persoon.Verhuringen,
POSTNRS = persoon.POSTNRS,
BANKREKENING_IBAN = persoon.BANKREKENING_IBAN,
GEBOORTELAND = persoon.GEBOORTELAND,
GEBOORTEPLAATS = persoon.GEBOORTEPLAATS,
GEBOORTEDATUM = persoon.GEBOORTEDATUM,
BANKREKENINGOGM = persoon.BANKREKENINGOGM,
Nationaliteit = persoon.Nationaliteit,
DUBIEUZEHUURDER = persoon.DUBIEUZEHUURDER,
BEROEP = persoon.BEROEP,
Een = eenheid,
DATA = data // HERE IT FAILS, BECAUSE DATA IS OF TYPE ICOLLECTION<DATA> WHILE data IS A SINGLE OBJECT
}
Upvotes: 1
Views: 2644
Reputation: 110101
The problem is you have converted a group-join into a left-join by unpacking the group. GroupJoin returns the collection you want.
join data in PagedView.Context.DATA
on persoon.ComputerNr equals data.COMPUTERNR into c
//from data in c.DefaultIfEmpty() //remove this line
...
DATA = c.ToList()
Upvotes: 2