我在我的 ASP.NET MVC3 应用程序中使用 Telerik Grid 来显示我的记录。
问题是在我的数据库中我有数百万条记录。因此,由于性能问题,我不想一次绑定所有记录。所以我需要一个逻辑,所以我可以先绑定 20 条记录。请记住,我的过滤器/排序不仅适用于 20 条记录,还适用于整个数据库。
实际上我关心的是性能,因为我的查询返回了所有数百万条记录,当我只需要在网格中显示 20 条或可能是 30 条时,为什么要返回所有数百万条记录。所以我想节省不需要的加载时间
谢谢
这是我的行动
[GridAction]
public ActionResult AjaxBibHierarchy()
{
return View(new GridModel(GetCommands()));
}
private IQueryable<BibViewModel> GetCommands()
{
var bib = (from a in db.Bibs
join inf in db.InfoTypes
on a.InfoTypeId equals inf.Id
where a.Status == "A"
select new BibViewModel
{
Title = db.BibContents.Where(x => x.TagNo == "245" && x.Sfld == "a").Select(y => y.NormValue).FirstOrDefault(),
Author = db.BibContents.Where(x => x.TagNo == "100" && x.Sfld == "a").Select(y => y.NormValue).FirstOrDefault(),
Id = a.Id,
Type = inf.Type,
InfoType = inf.Description,
Contents = "",
CreatedOn = a.CreatedOn
});
return bib;
}
看法
@(Html.Telerik().Grid<Vibrant.Areas.Cataloging.Models.BibViewModel>()
.Name("Bib")
.DataKeys(keys => keys.Add(c => c.Id))
.DataBinding(dataBinding => dataBinding
.Ajax()
)
.Columns(columns =>
{
columns.Bound(o => o.Id).Hidden(true);
columns.Bound(o => o.Title).Width(300).Title("Title");
columns.Bound(o => o.Author).Width(120).Title("Author");
columns.Bound(o => o.InfoType).Width(120).Title("InfoType");
columns.Bound(o => o.CatalogueDate).Width(120).Title("Cat.Date").Format("{0:yyyy-MM-dd}");
columns.Bound(o => o.CreatedOn).Width(120).Title("Created On").Format("{0:yyyy-MM-dd}");
})
.Sortable()
.Groupable()
.DataBinding(dataBinding => dataBinding.Server().Select("BibIndex", "Bib"))
.DataBinding(dataBinding => dataBinding.Ajax().Select("AjaxBibHierarchy", "Bib").Enabled(true))
.Scrollable(x => x.Height("auto"))
.Sortable(x => x.OrderBy(y => y.Add(z => z.CreatedOn).Descending()))
.Pageable(page =>
{
page.PageSize(10);
})
)