Immagina di avere il seguente DbSet
:
public class X {
public int Id { get; set; }
public string Name { get; set; }
public virtual ICollection<Y> YCollection { get; set; }
}
Quando voglio recuperare l'elemento 1 di X
DbSet<X>.Find(1);
che mi restituisce un oggetto proxy EF.
Ora che questo oggetto proxy ( X
) contiene molti Y
, mi piacerebbe recuperare YCollection
come IQueryable<Y>
. (Principalmente fare qualche ulteriore filtraggio su di esso prima di recuperarlo dal database.)
Come posso recuperare YCollection
come IQueryable<Y>
?
Non c'è modo di farlo direttamente dall'entità stessa di cui sono a conoscenza, ma puoi usare il contesto stesso per formulare la query:
var x = context.DbSet<X>.Find(1);
var query = context.Entry(x).Collection(x => YCollection).Query();
Suppongo che questo potrebbe essere racchiuso in un metodo di estensione da utilizzare come:
x.YCollection.AsQueryable(context);