gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 21:33:04 25 4
gpt4 key购买 nike

我正在使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com