如何使用Linq绑定Telerik Mvc网格中的前20条记录

本文关键字:20条 记录 网格 Mvc 何使用 Linq 绑定 Telerik | 更新日期: 2023-09-27 18:21:51

我在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);
          })
    )

如何使用Linq绑定Telerik Mvc网格中的前20条记录

这里有一个简单的例子。

导入System.Linq命名空间

 var procs = (from p in System.Diagnostics.Process.GetProcesses()
                     where p.ProcessName.StartsWith("s") // filter if needed. 
                     select new
                     {
                         Name = p.ProcessName,
                         Title = p.MainWindowTitle
                     }).Take(20).ToList(); ;

当我退出时,你想在应用所有telerik过滤器后获取20条记录。一个简单的方法(实际上可以解决)是将页面大小设置为20,然后禁用页脚:

        .Pageable(page =>
    {
        page.PageSize(20);
    }).Footer(false)

或者,如果你不想禁用页脚,只需使用dist简单技巧删除页面栏:

$('.t-pager','#YourGridId').remove();

编辑:

您的视图模型可以这样启动:

@model IEnumerable<CommandGridViewModel>
@(Html.Telerik().Grid(Model)
        .Name("GridCommands")
        .DataKeys(keys =>
        {
            keys.Add(c => c.Id);
        })
        .Pageable(page =>
        {
            page.PageSize(10);
        })
     ...
    .DataBinding(dataBinding =>
    {
        dataBinding.Server()
            .Select("Index", "Commands");
        dataBinding.Ajax()
            .Select("AjaxIndex", "Commands").Enabled(true);
    })

你的ajaxIndex操作可以是这样的:

[GridAction]
public ViewResult AjaxIndex()
{
   return View(new GridModel(GetCommands()));
}
private IQueryable<CommandGridViewModel> GetCommands()
{
   return from r in contenxt.Commands
          select new { r.Id , r.Name , r.Status , r.Type };
}