閉まっている。この質問にはデバッグの詳細が必要です。現在回答を受け付けておりません。
質問を編集して、目的の動作、特定の問題またはエラー、問題の再現に必要な最短のコードを含めます。これは他の人が質問に答えるのに役立ちます。
閉鎖
3 年間前
。
この質問を改善してください
MVC .NetCore アプリケーションにページングを実装したいと考えています。リストがあります」リスト<_Item>紺碧の塊から手に入れたアイテム」ページングを追加すると、「IQueryable は IAsyncQueryProvider を実装していません」というエラーが表示されます。
実装しようとしているページング:
https://learn.microsoft.com/en-us/aspnet/core/data/ef-mvc/sort-filter-page?view=aspnetcore-3.1
私が検討してみた考えられる解決策:
https://github.com/romantitov/MockQueryable
HomeController: インデックス関数
[Obsolete]
public async Task<IActionResult> Index(string outletId, string contractId, string sort, string currentFilter, int? pageNumber)
{
ViewData["CurrentSort"] = sort;
ViewData["OutletId"] = String.IsNullOrEmpty(sort) ? "descending outletId" : "";
ViewData["ContractId"] = sort == "ContractId" ? "descending contractId" : "ContractId";
if (outletId != null || contractId != null)
{
pageNumber = 1;
}
else
{
outletId = currentFilter;
contractId = currentFilter;
}
blobServices.Add_Tags_on_Blob("GSS_EDM_WorkHistoryTerminationsEngagementsIRP5Request_Dev.csv");
// List<_Item> Items = (List<_Item>)blobServices.Get_BlobItem_List();
List<_Item> Items = (List<_Item>)blobServices.Find_Blob_By_Tag(outletId, contractId);
var records = Items.AsQueryable();
switch (sort)
{
case "descending outletId":
records = records.OrderByDescending(x => x.OutletId);
break;
case "descending contractId":
records = records.OrderByDescending(x => x.ContractId);
break;
case "ContractId":
records = records.OrderBy(x => x.ContractId);
break;
default:
records = records.OrderBy(x => x.OutletId);
break;
}
int pageSize = 3;
return View(await PaginatedList<_Item>.CreateAsync(records, pageNumber ?? 1, pageSize));
// return View(Items.ToPagedList(pageNumber ?? 1, 10));
}
ページング クラス[エラーのあるコード行 HomeController
1
リンエラーのあるコードの es;ページングクラス
public class PaginatedList<T> : List<T>
{
public int PageIndex { get; private set; }
public int TotalPages { get; private set; }
public PaginatedList(List<T> items, int count, int pageIndex, int pageSize)
{
PageIndex = pageIndex;
TotalPages = (int)Math.Ceiling(count / (double)pageSize);
this.AddRange(items);
}
public bool HasPreviousPage
{
get
{
return (PageIndex > 1);
}
}
public bool HasNextPage
{
get
{
return (PageIndex < TotalPages);
}
}
public static async Task<PaginatedList<T>> CreateAsync(IQueryable<T> source, int pageIndex, int pageSize)
{
var count = await source.CountAsync();
var items = await source.Skip((pageIndex - 1) * pageSize).Take(pageSize).ToListAsync();
return new PaginatedList<T>(items, count, pageIndex, pageSize);
}
何かアップデートはありますか?私の返信は役に立ちましたか?
– ブランド・チャン
2020 年 9 月 7 日 6:36
------------------------
エラー メッセージによると、ソース IQueryable のプロバイダーは IAsyncQueryProvider を実装していません。 Entity Framework の非同期操作には、IAsyncQueryProvider を実装するプロバイダーのみを使用できます。
私たちは協力しますList<T>.AsQueryable() は IAsyncQueryProvider を実装していないため、ToListAsync メソッドを使用できません。
この問題を解決するには、PaginatedList メソッドの CreateAsync メソッドを以下のように変更します。
public static PaginatedList<T> Create(IQueryable<T> source, int pageIndex, int pageSize)
{
var count = source.Count();
var items = source.Skip((pageIndex - 1) * pageSize).Take(pageSize).ToList();
return new PaginatedList<T>(items, count, pageIndex, pageSize);
}
使用法:
return View( PaginatedList<_Item>.Create(records, pageNumber ?? 1, pageSize));
2020 年 9 月 4 日 7:41 に回答
ブランド・チャン
ブランド・チャン
24,000
6 個
ゴールドバッジ 6 個
38 個
銀バッジ 38 個
66 個
銅バッジ 66 個
1
Brando、本当にありがとう。完璧に機能しました 😎😝😝🤓
– メドゥピ・ラマボア
2020 年 9 月 7 日 8:58