c# - IPagedList.MVC,设置总大小?

标签 c# asp.net asp.net-mvc asp.net-mvc-4

我正在使用 asp.net MVC 5 构建一个应用程序,并且有一个使用 IPagedList.MVC 版本 4.5.0.0、AutoMapper 和 Entity Framework 的网格。

在项目中,我有一个 BusinessLayer,这是我的 Action 与之交谈的对象,因为我不希望 Action 方法直接与 Entity Framework 交谈。所以我的BLL有以下方法:

        public IPagedList<ActiveContractViewModel> GetAllContracts(string regNumFilter, int page)
    {
        var lstcontractViewModel = new List<ActiveContractViewModel>();
        using (ActiveContractRepository activeContractRepos = new ActiveContractRepository(new UnitOfWork()))
        {
            var activeContractList = activeContractRepos.All.OrderByDescending(x => x.Id).Include(c => c.Contractor);

            if (regNumFilter.Trim().Length > 0)
            {
                activeContractList = activeContractRepos.All.Where(x => x.RegistrationNumber.Contains(regNumFilter)).OrderByDescending(x => x.Id).Include(c => c.Contractor);
            }

            foreach (var activeContract in activeContractList)
            {
                Mapper.CreateMap<DomainClasses.ActiveContract, ActiveContractViewModel>().ForMember(dest => dest.ContractorModel, opts => opts.MapFrom(src => new ContractorViewModel
                    {
                        Id = src.Contractor.Id,
                        Name = src.Contractor.Name,
                        ContactPerson = src.Contractor.ContactPerson,
                        Phone = src.Contractor.Phone,
                        Fax = src.Contractor.Fax,
                        Address = src.Contractor.Address,
                        VendorNumber = src.Contractor.VendorNumber,
                        FederalTaxId = src.Contractor.FederalTaxId
                    }
                ));

                Mapper.AssertConfigurationIsValid();
                lstcontractViewModel.Add(Mapper.Map<ActiveContractViewModel>(activeContract));
            }
        }

        return lstcontractViewModel.ToPagedList(page, 20);
    }

我正在将我的 ActiveContract 类(来自 Entity Framework)映射到一个模型(ActiveContractVieWModel),它工作正常,返回数据并且分页工作。但我在调试时注意到 foreach 循环也会遍历所有记录,如果我有 2500 条记录,它会遍历所有记录,构建一个大列表,然后在 ToPageList 方法上使用。

有没有更好的方法来解决这个问题,这样我就可以构建我的模型并只用我需要的 20 条记录填充它并让 IPagedList 知道总大小?

最佳答案

我最终进一步研究了 IPageList.MVC,看到作者发布了关于此的信息: https://github.com/troygoode/pagedlist#example-2-manual-paging

“在某些情况下,您无法访问能够创建 IQueryable 的内容,例如在使用 .Net 的内置 MembershipProvider 的 GetAllUsers 方法时。此方法提供分页,但不是通过 IQueryable。幸运的是,PagedList 仍然支持您(注意使用 StaticPagedList):"

我转而使用 StaticPagedList,它现在工作得更好了,只需抓取我想要的记录数,分页也能正常工作。

关于c# - IPagedList.MVC,设置总大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23253172/

相关文章:

c# - 任务.WaitSubset/任务.WaitN?

c# - 使用来自第三方应用程序的 Microsoft Lync 进行音频调用 - Lync SDK

c# - 如何在 asp.net MVC 4 和 MVC 5 中设置默认 Controller

asp.net-mvc - ASP.NET MVC : generating action link with custom html in it

asp.net-mvc - ASP.NET MVC 辅助方法(如 Html.DropDownList())是否对输出 HTML 进行编码?

c# - 如何允许用户在使用 C# 的 WPF 中使用 Devexpress 验证验证事件后更改控制焦点?

c# - 我怎样才能避免错误地更新当前对象上的另一个对象?

c# - 移动外部程序的位置和改变大小

c# - 运行存储过程时无法解释的超时

asp.net - Visual Studio 2012中缺少ASP.NET Web应用程序模板