¿Por qué Skip y Take no funciona cuando se pasa a través de un método?
-
08-10-2019 - |
Pregunta
Supongamos siguientes códigos:
IEnumerable<MyClass> MakeQuery()
{
var query = from m in session.Linq<MyClass>()
select m;
return query;
}
List<MyClass> m1()
{
return MakeQuery()
.Skip(10)
.Take(20)
.ToList<MyClass>();
}
List<MyClass> m2()
{
var query = from m in session.Linq<MyClass>()
select m;
return query
.Skip(10)
.Take(20)
.ToList<MyClass>();
}
Suponiendo que todas las consultas son iguales, parece que en m1()
, Skip
y Take
no funciona. De hecho es como que no existen todos.
¿Por qué sucede esto y cómo se puede solucionar?
estoy usando linq-to-nhibernate y estos métodos se usan para paginación. Gracias.
Solución
¿Por qué no usar IQueryable para el método MakeQuery ()?
IQueryable<MyClass> MakeQuery()
{
return session.Linq<MyClass>();
}
No es que la consulta real tiene mucho sentido. Pero yo lo dejo a ti.
Pero esta es también la única diferencia entre M1 () y M2 ()
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow