asp.net core - ページングを追加すると、「IQueryable doesn,timple IAsyncQueryProvider」というエラーが表示されます。

okwaves2024-01-25  7

閉まっている。この質問にはデバッグの詳細が必要です。現在回答を受け付けておりません。

質問を編集して、目的の動作、特定の問題またはエラー、問題の再現に必要な最短のコードを含めます。これは他の人が質問に答えるのに役立ちます。

閉鎖

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

総合生活情報サイト - OKWAVES
総合生活情報サイト - OKWAVES
生活総合情報サイトokwaves(オールアバウト)。その道のプロ(専門家)が、日常生活をより豊かに快適にするノウハウから業界の最新動向、読み物コラムまで、多彩なコンテンツを発信。