Bien, necesito un control de cordura aquí ...¿Cuándo se ejecuta una consulta compilada que devuelve IQueryable?
He compilado una consulta que devuelve un IQueryable cuando se ejecuta.
¿En qué línea (s) debe ejecutarse realmente la consulta en la base de datos en el siguiente ejemplo?
101 IQueryable<T> results = MyCompiledQuery(MyDataContext);
102 List<T> final = (from t in result
103 where t.ID > 5
104 select t).ToList<T>();
Aquí es como defino la consulta compilada
public static Func<MyDataContext, IQueryable<Widget>> MyCompiledQuery=
CompiledQuery.Compile<MyDataContext, IQueryable<Widget>>(
(MyDataContext db) =>
from w in db.Widgets
where ((w.Type == WidgetType.Atype || //Widget.Atype is a Linq to Sql object, that I've defined statically
w.Type == WidgetType.Btype || //See above comment
w.Type == WidgetType.Ctype) && //See above comment
w.Location == WidgetLocation.Domestic) //Samething applies here
select euc);
para una discusión adicional, consulte: LINQ to SQL compiled queries and when they execute
No hay ninguna declaración en la línea 104. Intente establecer un punto de interrupción allí ... – Guffa
Creo que esta consulta realmente se ejecuta en la línea 101 (incluso antes de llamar a ToList). – lahsrah
No. La línea 101 crea una consulta. La consulta se ejecuta cuando se obtienen los datos reales. – alex