在ICollection上包含导航道具

时间:2016-11-07 14:13:02

标签: c# entity-framework linq entity-framework-core

我有这个Keuring类,我有一个问题,包括使用linq在Testresultaten集合属性上的导航项。

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类:

public partial class Testresultaten
{
    //Simple properties here

    //Complex properties below
    public virtual Test Test { get; set; }
    public virtual Keuring Keuring { get; set; }
}

以下是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 =&gt; {来自[x]中的Testresultaten subItem .Testresultaten select [subItem] .Test}'无效。表达式应代表属性访问:'t =&gt; t.MyProperty”。

Test类中的Testresultaten var是属性而不是字段。我究竟做错了什么?它可以像Gereedschap

Keuring一样访问

1 个答案:

答案 0 :(得分:0)

您需要按照以下所示进行操作。

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

参与: Including multiple levels