Rui Martins
Rui Martins

Reputation: 2194

join 4 tables with linq

I'm trying to join 4 tables using linq.

This is my code,

var query =  Context.AanvraagV.Join(Context.IdnPartijMVSet, aanvraag => aanvraag.AlvNummer, partijMv => partijMv.AlvNummer, (aanvraag, partijMv) => new { aanvraag, partijMv })
                .Join(Context.DossierVaststellingSet, aanvraag => aanvraag.aanvraag.AanvraagId, dossierVaststelling => dossierVaststelling.DossierVersieId, (aanvraag, dossierVaststelling) => new { aanvraag, dossierVaststelling })
                .Join(Context.IdnPartijVoorkeurContactMVSet,  aanvraag => aanvraag.aanvraag.partijMv.AlvNummer, partijVoorkeur => partijVoorkeur.AlvNummer,   (aanvraag, partijVoorkeur) => new { aanvraag, partijVoorkeur });

Then I return a query and this is what I get

 return query.Select(x => new ZoekResultaatDto{
                AanvraagNummer          = x.aanvraag.aanvraag.aanvraag.DossierNummer,
                Versie                  = x.aanvraag.aanvraag.aanvraag.AanvraagVersie,
                StartjaarAanvraag       = x.aanvraag.aanvraag.aanvraag.AanvraagStartCampagne,
                EindjaarAanvraag        = x.aanvraag.aanvraag.aanvraag.AanvraagEindCampagne,
                Maatregel               = x.aanvraag.aanvraag.aanvraag.Maatregel,
                Pakket                  = x.aanvraag.aanvraag.aanvraag.MaatregelPakket,
                AanvraagType            = x.aanvraag.aanvraag.aanvraag.Aanvragtype,
                Eenheid                 = x.aanvraag.aanvraag.aanvraag.VerbintenisWaardeEenheid,
                VerbintenisOppervlakte  = x.aanvraag.aanvraag.aanvraag.VerbintenisWaarde,
                KeuzeBevestiging        = x.aanvraag.aanvraag.aanvraag.KeuzeBevestiging,
                IndieningsdatumAanvraag = x.aanvraag.aanvraag.aanvraag.AanvraagIndieningsDatum,
                Status                  = x.aanvraag.aanvraag.aanvraag.AanvraagStatus,
                LandbouwerNummer        = x.aanvraag.aanvraag.aanvraag.AlvNummer,
                Naam                    = x.aanvraag.aanvraag.partijMv.Naam,
                Rechtsvorm              = x.aanvraag.aanvraag.partijMv.Rechtsvorm ,
                Adres                   = string.Format("{0} {1} {2}", x.aanvraag.aanvraag.partijMv.Straat, x.aanvraag.aanvraag.partijMv.Huisnummer, x.aanvraag.aanvraag.partijMv.Bus),
                Postcode                = x.aanvraag.aanvraag.partijMv.Postcode,
                Gemeente                = x.aanvraag.aanvraag.partijMv.Gemeente,
                EmailaAdres             = x.partijVoorkeur.Email,
                OpmerkingCode           = x.aanvraag.dossierVaststelling.VaststellingCode,
                OpmerkingOmschrijving   = RefVaststellingResources.OMSCHRIJVING(x.aanvraag.dossierVaststelling)
            }).ToList();

But this is not what I want. What i want is this. How can I change the joins to get this instead?

return query.Select(x => new ZoekResultaatDto{
                AanvraagNummer          = x.aanvraag.DossierNummer,
                Versie                  = x.aanvraag.AanvraagVersie,
                StartjaarAanvraag       = x.aanvraag.AanvraagStartCampagne,
                EindjaarAanvraag        = x.aanvraag.AanvraagEindCampagne,
                Maatregel               = x.aanvraag.Maatregel,
                Pakket                  = x.aanvraag.MaatregelPakket,
                AanvraagType            = x.aanvraag.Aanvragtype,
                Eenheid                 = x.aanvraag.VerbintenisWaardeEenheid,
                VerbintenisOppervlakte  = x.aanvraag.VerbintenisWaarde,
                KeuzeBevestiging        = x.aanvraag.KeuzeBevestiging,
                IndieningsdatumAanvraag = x.aanvraag.AanvraagIndieningsDatum,
                Status                  = x.aanvraag.AanvraagStatus,
                LandbouwerNummer        = x.aanvraag.AlvNummer,
                Naam                    = x.partijMv.Naam,
                Rechtsvorm              = x.partijMv.Rechtsvorm ,
                Adres                   = string.Format("{0} {1} {2}", x.partijMv.Straat, x.partijMv.Huisnummer, x.partijMv.Bus),
                Postcode                = x.partijMv.Postcode,
                Gemeente                = x.partijMv.Gemeente,
                EmailaAdres             = x.partijVoorkeur.Email,
                OpmerkingCode           = x.dossierVaststelling.VaststellingCode,
                OpmerkingOmschrijving   = RefVaststellingResources.OMSCHRIJVING(x.dossierVaststelling)
            }).ToList();

Upvotes: 1

Views: 48

Answers (1)

Rui Martins
Rui Martins

Reputation: 2194

I did it. And also solved the problem of returning a AnonymousType

    public class ZoekResultaatLijstDto
        {
            public AanvraagV                  aanvraag      { get; set; }
            public IdnPartijMV                idnPartijMv   { get; set; }
            public DossierVaststelling        dossierVast   { get; set; }
            public IdnPartijVoorkeurContactMV idnPartijVoor { get; set; }
        }

public List<ZoekResultaatLijstDto> GetItems(ZoekCriteriaDto zoekCriteria)
        {
         IQueryable<ZoekResultaatLijstDto> query =  Context.AanvraagV.Join(Context.IdnPartijMVSet, aanvraag => aanvraag.AlvNummer, partijMv => partijMv.AlvNummer, (aanvraag, partijMv) => new { aanvraag, partijMv })                
    .Join(Context.DossierVaststellingSet, aanvraag => aanvraag.aanvraag.AanvraagId, dossierVaststelling => dossierVaststelling.DossierVersieId, 
    (aanvraag, dossierVaststelling) => new { aanvraag, dossierVaststelling }).Select( j => new {j.aanvraag, j.aanvraag.partijMv, j.dossierVaststelling})
    .Join(Context.IdnPartijVoorkeurContactMVSet, aanvraag => aanvraag.aanvraag.partijMv.AlvNummer, partijVoorkeur => partijVoorkeur.AlvNummer, (aanvraag, partijVoorkeur) => new { aanvraag, partijVoorkeur })
    .Select(m => new ZoekResultaatLijstDto() { aanvraag = m.aanvraag.aanvraag.aanvraag, dossierVast = m.aanvraag.dossierVaststelling, idnPartijMv = m.aanvraag.partijMv, idnPartijVoor =  m.partijVoorkeur });

    return query.Select(zoekResultaat => zoekResultaat).ToList(); 
}

Upvotes: 1

Related Questions