Hola grupo!
Estuve haciendo pruebas con Linq to NHibernate y la verdad que estoy
deseando ver el resultado de la nueva implementación sin la Criteria
API, pero os explico un problemilla que me ha surgido.
En este momento tengo un NHRepository<T> que es el único que usa
NHibernate. Después hay una serie de Services por encima y que se usan
desde la aplicación.
En el NHRepository hay un método tal que así:
public IQueryable<T> FindAll()
{
return (from t in session.Linq<T>() select t);
}
Que devuelve un IQueryable y luego en el Service concreto algo tal que
así:
public IList<User> FindAllUsers()
{
return (from user in UserRepository.FindAll() select
user).ToList();
}
Siendo UserRepository : NHRepository<User>.
Hasta aquí todo perfecto. Luego hay métodos que me filtran los
usuarios por ejemplo y todo eso, pero no viene al caso. Estuve leyendo
http://devlicio.us/blogs/billy_mccafferty/archive/2008/09/03/custom-collections-with-nhibernate-part-iv-extensions.aspx
y me pareció interesante esa aproximación, pero no me funciona del
todo bien como quisiera.
Si hago esto:
public static List<User> WithName(this IList<User> users,
string name)
{
return (
from user in users
where user.Name == name
select user)
.ToList<User>();
}
Al usar el método, por ejemplo: FindAllUsers.WithName("prueba"),
primero me saca todos los Users al hacer el ToList() en el Service y
luego me filtra la colección en memoria. (Corregidme si me equivoco)
Si la colección es pequeña no pasa nada pero si es grande, lo ideal
sería que se hiciese esta operación sobre la base de datos
directamente.
Si no es posible hacerlo no pasa nada, puedo seguir trabajando como
hasta ahora, haciendo el filtrado en el Service contra los resultados
del Repository, que en ese caso si que me filtra realmente via SQL,
pero me surgia la duda de si esto que digo es posible y si lo es,
dónde está mi error.
Yo creo que si en vez de hacer el ToList() y devolver IList en el
Service, devolviese directamente un IQueryable funcionaría, pero no
estoy del todo seguro y tampoco tengo muy claro que eso sea una buena
idea, prefiero mantenerme en los ILists y no crear tanta dependencia
de Linq.
Perdonad el rollo que he soltado pero no lo sabía explicar más
brevemente.
--~--~---------~--~----~------------~-------~--~----~
Para escribir al Grupo, hágalo a esta dirección:
[email protected]
Para más, visite: http://groups.google.com/group/NHibernate-Hispano
-~----------~----~----~----~------~----~------~--~---