Come posso includere una lista interna, che si trova all'interno di un'altra lista, in una query di Entity Framework Core 2.0.1?
Questo è quello che ho provato senza successo:
clase = repClase.ListQueryable(
//Specification
new ApplicationCore.Specifications.ClaseFilterByIdAndIdArticuloWithIncludesSpecification(idClase, idArticuloParam)
)
.Include(c => c.ReferenciasConstructor)
.ThenInclude(rc => rc.Select(rc1 => rc1.ReferenciaFabricanteTieneReferenciaConstructor))
.FirstOrDefault();
E l'errore che genera: " L'espressione di proprietà 'rc => {da ReferenciaConstructor rc1 in rc select [rc1] .ReferenciaFabricanteTieneReferenciaConstructor}' non è valida.L'espressione dovrebbe rappresentare un accesso di proprietà: 't => t.MyProperty'. " .
Classi:
[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; }
}
Questo è un problema noto di Intellisense con il sovraccarico di ThenInclude
per le proprietà di navigazione del tipo di raccolta, tracciato dal Completamento dei membri mancanti del parametro lambda nel caso di tolleranza agli errori n. 8237 problema GitHub di Roslyn.
Fino a quando non viene corretto, digita semplicemente il nome della proprietà e verrà compilato correttamente e funzionerà come previsto.
.ThenInclude(mu => mu.ParseSubTrees)
Aggiornamento: ora è anche menzionato in modo specifico nella sezione Inclusione livelli multipli della documentazione di EF Core:
Nota
Le versioni correnti di Visual Studio offrono opzioni di completamento del codice errate e possono causare la
ThenInclude
espressioni corrette con errori di sintassi quando si utilizza il metodoThenInclude
dopo una proprietà di navigazione della raccolta. Questo è un sintomo di un bug IntelliSense tracciato su https://github.com/dotnet/roslyn/issues/8237 . È possibile ignorare questi errori di sintassi spuri purché il codice sia corretto e possa essere compilato correttamente.