【问题标题】:Entity Framework Core - Include nested list inside list [duplicate]实体框架核心 - 在列表中包含嵌套列表 [重复]
【发布时间】:2018-01-16 08:39:55
【问题描述】:

如何在 Entity Framework Core 2.0.1 查询中包含另一个列表中的内部列表?

这是我尝试但没有成功的方法:

clase = repClase.ListQueryable(
    //Specification
    new ApplicationCore.Specifications.ClaseFilterByIdAndIdArticuloWithIncludesSpecification(idClase, idArticuloParam)
)
.Include(c => c.ReferenciasConstructor)
.ThenInclude(rc => rc.Select(rc1 => rc1.ReferenciaFabricanteTieneReferenciaConstructor))
.FirstOrDefault();

以及它抛出的错误: "属性表达式 'rc => {from ReferenciaConstructor rc1 in rc select [rc1].ReferenciaFabricanteTieneReferenciaConstructor}' 无效。该表达式应表示属性访问:'t => t.MyProperty'。 ”。

类:

[Table("Clases", Schema = "public")]
public class Clase
{

    ...

    [InverseProperty("Clase")]
    public IList<ReferenciaConstructor> ReferenciasConstructor { get; set; }

}

[Table("ReferenciasConstructor", Schema = "public")]
public class ReferenciaConstructor
{

    [Key]
    public int Id { get; set; }

    ...

    //JOIN TABLE
    [InverseProperty("ReferenciaConstructor")]
    public IList<ReferenciaFabricanteTieneReferenciaConstructor> ReferenciaFabricanteTieneReferenciaConstructor { get; set; }

}


//JOIN TABLE
[Table("ReferenciaFabricanteTieneReferenciaConstructor", Schema = "public")]
public class ReferenciaFabricanteTieneReferenciaConstructor {

    [Key]
    public int IdReferenciaFabricante { get; set; }

    [ForeignKey("IdReferenciaFabricante")]
    public ReferenciaFabricante ReferenciaFabricante { get; set; }

    [Key]
    public int IdReferenciaConstructor { get; set; }

    [ForeignKey("IdReferenciaConstructor")]
    public ReferenciaConstructor ReferenciaConstructor { get; set; }
}

【问题讨论】:

  • 如错误所述,Include(expression) 中的expression 不能是任意表达式。请改用Select
  • .ThenInclude(rc =&gt; rc.ReferenciaFabricanteTieneReferenciaConstructor) - 查看重复的问题为什么。

标签: c# entity-framework-core


【解决方案1】:

您不能使用Include 来选择用途。只需select 所需的属性。

clase = repClase.ListQueryable(
        //Specification
        new ApplicationCore.Specifications.ClaseFilterByIdAndIdArticuloWithIncludesSpecification(idClase, idArticuloParam)
    )
    .Include(c => c.ReferenciasConstructor)
    .SelectMany(rc => rc.ReferenciasConstructor.Select(rc1 => rc1.ReferenciaFabricanteTieneReferenciaConstructor))
    .FirstOrDefault();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多