2010-01-09 6 views
4

Je veux faire quelque chose comme çaTransform LINQ IQueryable dans un IQueryable paginée en utilisant LINQ to NHibernate

public IQueryable GetPaged<TSource>(IQueryable<TSource> query, int startIndex, int pageSize) 
    { 
     return GetSession() 
      .Linq<TSource>() 
      .UseQuery(query) 
      .Take(pageSize) 
      .Skip(startIndex); 
    } 

Vous pouvez mettre toute déclaration IQuerable et « il devient paginée » ou il sera paginée. J'utilise LINQ pour NHibernate.

J'espère que vous l'obtenez, sry pour ce mauvais anglais: o

edit: Peut-être mon approche est la mauvaise, est-ce?

Répondre

12

C'est copié du code de travail.

public static class QueryableExtensions 
{ 
    public static IQueryable<T> Paged<T>(this IQueryable<T> source, int page, 
                    int pageSize) 
    { 
     return source 
      .Skip((page - 1) * pageSize) 
      .Take(pageSize); 
    } 
} 
+0

sry ce n'est pas ce que je voulais. Je veux créer un objet IQuerable. Cet objet doit être passé dans la méthode GetAllPaged (IQuerable queryThatShallbePaged, int pageSize, int startIndex) – Rookian

+0

Renommez les noms des variables et vous avez ce que vous dites. – Paco

+0

votre solution est utilisée par le client et le client ne doit pas placer la requête dans la méthode, à cause de la méthode d'extension Linq. Je voulais avoir une solution pour mes dépôts. Mais oui votre solution fonctionne, mais ce n'est pas exactement ce que je veux. Je ne veux pas cela ... IQueryable.Paged (page, taille) Je veux ceci ... Pagé (requête, page, taille). Mais je ne suis pas sûr de la meilleure solution. – Rookian

0
return query.skip(startIndex).take(pageSize); 
+0

Le problème est que j'utilise LINQ to NHibernate et getSession() Linq () est de type IQueryable/IQueryable si cela ne suffit pas moi – Rookian

Questions connexes