Я использую ((ObjectQuery)IQueryable).ToTraceString()
для получения и настройки кода SQL, который будет выполняться LINQ.
Моя проблема в том, что в отличие от большинства IQueryable методов IQueryable.Count, как определено следующим образом:
public static int Count(this IQueryable source) {
return (int)source.Provider.Execute(
Expression.Call(
typeof(Queryable), "Count",
new Type[] { source.ElementType }, source.Expression));
}
выполняет запрос без компиляции и возврата IQueryable. Я хотел сделать трюк примерно так:
public static IQueryable CountCompile(this IQueryable source) {
return source.Provider.CreateQuery(
Expression.Call(
typeof(Queryable), "Count",
new Type[] { source.ElementType }, source.Expression));
}
Но тогда CreateQuery дает мне следующее исключение:
LINQ to Entities query expressions can only be constructed from instances that implement the IQueryable interface.