Io uso ((ObjectQuery)IQueryable).ToTraceString()
per ottenere e modificare il codice SQL che verrà eseguito da LINQ.Come ottenere ToTraceString per IQueryable.Count
mio problema è che a differenza di molti metodi IQueryable IQueryable.Count come definiti in questo modo:
public static int Count(this IQueryable source) {
return (int)source.Provider.Execute(
Expression.Call(
typeof(Queryable), "Count",
new Type[] { source.ElementType }, source.Expression));
}
esegue query senza la compilazione e la restituzione IQueryable. Volevo fare il trucco da qualcosa di simile:
public static IQueryable CountCompile(this IQueryable source) {
return source.Provider.CreateQuery(
Expression.Call(
typeof(Queryable), "Count",
new Type[] { source.ElementType }, source.Expression));
}
Ma poi createQuery mi dà la seguente eccezione:
LINQ to Entities query expressions can only be constructed from instances that implement the IQueryable interface.
Grande, sai come ottenere lo stesso su DBContext, senza utilizzare il suo ObjectContext? Quando provo a utilizzare lo stesso approccio - genera eccezione - Impossibile creare l'istanza {Entità che voglio contare}, la query può utilizzare solo i valori primitivi –
@PhilippMunin Quando provo in un progetto usando DbContext, funziona perfettamente. Puoi includere altri dettagli che mostrano come farlo fallire? (Il mio progetto utilizza una build EF6 abbastanza recente ma ancora pre-release, se è importante.) – hvd
Ho creato una domanda separata per questo: http://stackoverflow.com/questions/19385346/dbcontext-get-query-for- scalar-system-functions-count-any-sum-max Apprezzeremmo davvero se trovate un modo per farlo –