Hola,
Yo también estoy haciendo algo con NH.Linq, y en mi NHRepository<T>
tengo el siguiente método:

public IList<T> Query(Expression<Func<T, bool>> where)
{
        using (ISession session = sessionManager.OpenSession())
        {
                return session.Linq<T>().Where(where).ToList();
        }
}

si bien la sintaxis es distinta a la que vos mencionas, la
funcionalidad es la misma:

IList<User> users = userRepository.Query(x => x.Name == "prueba");


Además tengo estos otros dos que devuelven un solo objeto:

User user = userRepository.FindBy(x => x.Name, "prueba");
User user = userRepository.FindBy(x => x.Name == "prueba");

En todos los casos, el filtrado se hace en SQL.

Saludos.

On 5 sep, 07:30, Marc Climent <[EMAIL PROTECTED]> wrote:
> 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 
> leyendohttp://devlicio.us/blogs/billy_mccafferty/archive/2008/09/03/custom-c...
> 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
-~----------~----~----~----~------~----~------~--~---

Responder a