モバイルアプリケーションとASP.NETMVC4Webアプリで使用するWebAPIを作成しています。私たちは巨大なデータベースを扱っているので、可能な限りエンティティのリストを具体化することを避ける必要があります。WebAPIはJSONを返します。
状況は単純です...ライセンスのリストの要求を受け取りますが、返される可能性のあるレコードが500,000あるため、ページングする必要があります。返されるビューモデルのリストに変換する前に、エンティティのIQueryableリストにページング/フィルタリングを適用するにはどうすればよいですか?
これが私が使っているいくつかのテストコードです...
// 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;
}
あなたの時間とあなたの提案をありがとう、
マイク