2016-11-07 78 views
1

我有這個Keuring類,我有一個問題,其中包括使用linq的Testresultaten集合屬性上的導航項。包括導航支持ICollection

public partial class Keuring 
{ 
    public Keuring() 
    { 
     Testresultaten = new HashSet<Testresultaten>(); 
    } 

    //Simple properties here 

    //Complex properties below 
    public virtual ICollection<Testresultaten> Testresultaten { get; set; } 
    public virtual Gereedschap Gereedschap { get; set; } 
} 

這裏是Testresultaten類:

這裏是Gereedschap類:

public partial class Gereedschap 
{ 
    public Gereedschap() 
    { 
     Keuring = new HashSet<Keuring>(); 
    } 

    //Simple properties here 

    //Complex properties below 
    public virtual ICollection<Keuring> Keuring { get; set; } 
    public virtual Debiteur Debiteur { get; set; } 
} 

此語句正常工作:

var keuringEntry = db.Keuring.Include(item => item.Gereedschap).Include(item => item.Testresultaten).SingleOrDefault(item => item.key = "keyvalue"); 

但是,當我添加一個額外的Include這樣的:
Include(item => item.Testresultaten.Select(subItem => subItem.Test))
語句給出一個錯誤:

var keuringEntry = db.Keuring.Include(item => item.Gereedschap).Include(item => item.Testresultaten.Select(subItem => subItem.Test)).SingleOrDefault(item => item.key = "keyvalue"); 

錯誤: 屬性表達「X => {從Testresultaten子項在[X] .Testresultaten選擇[子項目] .Test}'無效。表達式應該表示一個屬性訪問:'t => t.MyProperty'。

類中的Test var是屬性而不是字段。我究竟做錯了什麼?並且它可以像Gereedschap那樣在Keuring

+0

而測試是在你的模型中的實體? – octavioccl

+0

看看['ThenInclude'](https://docs.efproject.net/en/latest/querying/related-data.html#id2) –

+0

是的,它是一個實體 –

回答

0

您需要按如下所示進行操作。

var keuringEntry = db.Keuring.Include(item => item.Gereedschap) 
        .Include(item => item.Testresultaten) 
         .ThenInclude(subItem => subItem.Test) 
        .FirstOrDefault(item => item.key = "keyvalue"); 

Refernce:Including multiple levels