【问题标题】:How to join a one-to-many relationship in Entity Framework?如何在实体框架中加入一对多关系?
【发布时间】:2017-03-01 23:46:18
【问题描述】:

我正在尝试在实体框架中将几个表连接在一起。表的关系之一是一对多关系。

例如对象 Person 有一个对象 DATA 的列表,但是当我在实体框架中包含该表时,它只在我的 select 子句中返回单个 DATA 项。

查询如下所示:

                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
                }

【问题讨论】:

    标签: c# entity-framework linq


    【解决方案1】:

    问题是您已通过解包组将组连接转换为左连接。 GroupJoin 返回你想要的集合。

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

    【讨论】:

      猜你喜欢
      • 2013-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-28
      • 2011-12-17
      • 1970-01-01
      相关资源
      最近更新 更多