ASP.NET MVC 4プロジェクトとSQLビュー(vvItem)があります。ItemController
MVCAppEntities db = new MVCAppEntities();
public ActionResult Index()
{
var itemqry = db.vvItem.OrderBy(s => s.name);
//var pageditems = itemqry.Skip(10).Take(20); // 25 seconds
return View(itemqry.ToList()); // 88 seconds
}
Index.cshtml表示
@model IEnumerable<MVCApplication1.Models.vvItem>
@{
var norows = 20;
var grid = new WebGrid(Model, canPage: true, rowsPerPage: norows);
grid.Pager(WebGridPagerModes.NextPrevious);
@grid.GetHtml(tableStyle: "table", headerStyle: "header", columns: grid.Columns(
grid.Column(columnName: "name", header: "Name", canSort: true),
grid.Column(columnName: "quantity", header: "Quantity", canSort: true),
grid.Column(columnName: "code", header: "Code", canSort: true),
grid.Column(columnName: "Price", header: "Price", canSort: true),
))}
vvItemには、ほぼ400000レコードがあります。webgrid Pagerは表示されたレコードのみをロード(Take())し、次のページに移動する場合は最初のレコードをSkip()することを知っていると思いました。
Q:表示されたレコードのみをロードするビューを効率的に作成するにはどうすればよいですか?
JSONバージョンとNerdDinnerの2つのソリューションが見つかりました
私はJSONがあまり得意ではないので、NerdDinnerソリューションを試しました。そして、私のコメントした行のように、
//var pageditems = itemqry.Skip(10).Take(20);
itemqryにはすでにすべてのレコードがロードされており、ロードに多くの時間がかかりました。
Q2:ページングを今行うにはどうすればよいですか?ページ番号を変更する必要があります。Indexメソッドから。
public ActionResult Index(int? page, string filter1 = " ", string filter2 = " ")