Uso ((ObjectQuery)IQueryable).ToTraceString()
para obtener y modificar el código SQL que va a ejecutar LINQ.Cómo obtener ToTraceString para IQueryable.Count
Mi problema es que a diferencia de la mayoría de los métodos IQueryable IQueryable.Count tal como se definen así:
public static int Count(this IQueryable source) {
return (int)source.Provider.Execute(
Expression.Call(
typeof(Queryable), "Count",
new Type[] { source.ElementType }, source.Expression));
}
ejecuta consulta sin compilar y volviendo IQueryable. que quería hacer el truco por algo como esto:
public static IQueryable CountCompile(this IQueryable source) {
return source.Provider.CreateQuery(
Expression.Call(
typeof(Queryable), "Count",
new Type[] { source.ElementType }, source.Expression));
}
Pero entonces CreateQuery me da la siguiente excepción:
LINQ to Entities query expressions can only be constructed from instances that implement the IQueryable interface.
Genial, ¿sabes cómo lograr lo mismo en DBContext, sin usar su ObjectContext? Cuando trato de usar el mismo enfoque - arroja una excepción - No puedo crear la instancia {Entidad que deseo contar}, la consulta solo puede usar valores primitivos –
@PhilippMunin Cuando intento esto en un proyecto que usa DbContext, funciona bien. ¿Puedes incluir más detalles que muestren cómo hacer que falle? (Mi proyecto está usando una compilación de EF6 bastante reciente pero aún prelanzada, si es que importa.) – hvd
He creado una pregunta separada para eso: http://stackoverflow.com/questions/19385346/dbcontext-get-iqueryable-for- scalar-system-functions-count-any-sum-max Realmente apreciaría si encuentra una forma de hacerlo –