0

結果を返すこのlinqステートメントがあり、ページごとに表示されるアイテムの数の仕様を追加したかった. デフォルトは 1 ページあたり 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);
    }
4

1 に答える 1

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);
于 2013-04-07T13:15:01.037 に答える