2013-04-07 91 views
0

我有這個linq語句返回結果,我想添加每頁顯示多少項目的規格。我知道默認值是每頁10個,我怎樣才能將它改爲40?語法返回每頁結果數

var _roster = DataCBase.StoredProcedures.GetUser<Users>(userID, r => new Users 
     { 
      Name = RosterColumnMap.Name(r), 
      Email = RosterColumnMap.Email(r) 
     }); 

獲得用戶

public virtual IEnumerable<T> GetUser<T>(int userId, Func<IDataRecord, T> modelBinder, int resultsPerPage = 10, int pageNumber = 1) 
    { 
     if (userId < 1) 
      throw new NullReferenceException("The sectionId cannot be null, when retreiving an element"); 

     if (resultsPerPage < 1) 
      resultsPerPage = 1;  // enforce bare minimum result set 

     if (pageNumber < 1) 
      pageNumber = 1;   // enforce one-based page numbering 

     SqlCommand _command = new SqlCommand("dbo.GetUser"); 
     _command.CommandType = CommandType.StoredProcedure; 
     _command.Parameters.Add(new SqlParameter { ParameterName = "userId", SqlDbType = SqlDbType.Int, Value = userId }); 
     _command.Parameters.Add(new SqlParameter { ParameterName = "resultsPerPage", SqlDbType = SqlDbType.Int, Value = resultsPerPage }); 
     _command.Parameters.Add(new SqlParameter { ParameterName = "pageNumber", SqlDbType = SqlDbType.Int, Value = pageNumber }); 

     return DbInstance.ExecuteAs<T>(_command, modelBinder); 
    } 

回答

1

無論LINQ的,也不實體框架有記錄的 '每頁' 任何默認號碼。但你的GetUser功能包括resultsPerPage參數,你可以這樣做:

var _roster = DataCBase.StoredProcedures.GetUser<Users>(userID, r => new Users 
    { 
     Name = RosterColumnMap.Name(r), 
     Email = RosterColumnMap.Email(r) 
    }, 40); 

要限制的結果Linq中的數量使用的Enumerable.Take方法:

var _roster = DataCBase.StoredProcedures.GetUser<Users>(userID, r => new Users 
    { 
     Name = RosterColumnMap.Name(r), 
     Email = RosterColumnMap.Email(r) 
    }).Take(40); 
+0

不會,如果SP恢復工作只有10個元素。 – MarcinJuraszek 2013-04-07 13:16:49

+0

添加'GetUsers'並找到10來自哪裏。我想這個改變,因爲我將使用無限滾動js加載數據,因爲用戶滾動下來而不是處理頁面或加載所有信息並花費很長時間。 – Masriyah 2013-04-07 13:22:57

+0

@Amina我已經更新了我的答案。請注意,簡單地增加頁面大小不會讓您無限滾動。這是一個很複雜的問題,但假設你的javascript是健全的,這將減少對數據庫的查詢次數。 – 2013-04-07 13:26:40