我正在创建一个供移动应用程序以及我们的 ASP.NET MVC4 webapp 使用的 WebAPI。我们正在使用一个庞大的数据库,因此我们需要尽可能避免实体化实体列表。我们的 WebAPI 返回 JSON。
情况很简单...收到了对许可证列表的请求,但必须对其进行分页,因为有 500,000 条记录可以返回。在将实体列表转换为返回的视图模型列表之前,如何将分页/过滤应用于实体列表?
这是我正在使用的一些测试代码...
// Get the list of licenses, but page them.
// GET api/<controller>
//[Queryable]
public IQueryable<LicenseViewModel> Get()
{
Mapper.CreateMap<LicenseEntity, LicenseViewModel>();
Mapper.AssertConfigurationIsValid();
List<LicenseViewModel> vms = new List<LicenseViewModel>();
using (var repo = new LicenseRepository())
{
// Get the IQueryable<LicenseEntity> list...
// IS THERE SOME WAY TO APPY PAGING/FILTERING HERE?
var entities = repo.List();
// Convert them to viewmodels. ARGGG! This will materialize the huge list
// if we cannot applyfiltering/paging in the previous step.
foreach (var item in entities)
{
var vm = Mapper.Map<LicenseEntity, LicenseViewModel>(item);
list.Add(vm);
}
}
return vms.AsQueryable();
}
我尝试了以下操作,但是当我尝试展开列表并查看结果时收到“无法评估儿童”错误。
using (var repo = new LicenseRepository())
{
// Get the list of entities...
var list = repo
.List()
.Select(x => Mapper.Map(x, new LicenseViewModel()));
return list;
}
感谢您的时间和建议,
麦克风