2010-01-09 74 views
4

我想要做這樣的事情變換LINQ的IQueryable爲分頁IQueryable的使用LINQ to NHibernate的

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

所以,你可以把任何 IQuerable聲明和「變爲了分頁」,否則將被尋呼。

我正在使用LINQ to NHibernate。 我希望你得到它,對這個不好的英語sry:0

編輯:也許我的做法是錯誤的,是嗎?

回答

12

這是從工作代碼複製:

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這不是我想要的。我想創建一個IQuerable對象。這個對象應該被傳遞給方法GetAllPaged(IQuerable queryThatShallbePaged,int pageSize,int startIndex) – Rookian 2010-01-10 11:29:30

+0

重命名變量名稱,你有你說的。 – Paco 2010-01-10 13:22:55

+0

由於Linq擴展方法,客戶端使用您的解決方案並且客戶端沒有將查詢放入方法中。我想爲我的存儲庫提供解決方案。但是,您的解決方案有效,但這不完全是我想要的。我不想要這個... IQueryable.Paged(頁面,大小)我想這...頁面(查詢,頁面,大小)。但我不確定哪種解決方案更好。 – Rookian 2010-01-10 16:07:13

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

的問題是,我使用的LINQ to NHibernate和的getSession()LINQ的()是類型的IQueryable/IQueryable的的所以這不利於我 – Rookian 2010-01-09 21:38:12