Asp Core,如何将PagingList <t> .CreateAsync()与viewModel一起使用?

时间:2018-01-19 22:54:43

标签: asp.net asp.net-mvc sorting asp.net-core paging

我正在开发一个asp.net核心1.1项目,我想在我的一些视图中创建分页。我研究了关于asp核心分页的微软文档,但它是一个非常简单的模式,有1个表。在我看来,我使用多表并使用viewmodel来初始化它。我想使用PagingList<T>.CreateAsync()方法创建分页但得到错误: can not convert from system.linq.Iqueryable<> to system.linq.IorderedQueryable<>

我的行动:

    [HttpGet]
    public async Task<IActionResult> Index(int? page)
    {
        List<BookListViewModel> model = new List<BookListViewModel>();
        var query = (from b in _context.books
                     join a in _context.authors on b.AuthorID equals a.AuthorId
                     join bg in _context.bookgroups on b.BookGroupID equals bg.BookGroupId


                     select new
                     {
                         b.BookId,
                         b.BookName,
                         b.BookPageCount,
                         b.BookImage,
                         b.AuthorID,
                         b.BookGroupID,
                         a.AuthorName,
                         bg.BookGroupName
                     });

        foreach (var item in query)
        {
            BookListViewModel objmodel = new BookListViewModel();

            objmodel.BookId = item.BookId;
            objmodel.BookName = item.BookName;
            objmodel.BookImage = item.BookImage;
            objmodel.BookPageCount = item.BookPageCount;
            objmodel.AuthorId = item.AuthorID;
            objmodel.BookGroupId = item.BookGroupID;
            objmodel.AuthorName = item.AuthorName;
            objmodel.BookGroupName = item.BookGroupName;

            model.Add(objmodel);

        }
        ViewBag.RootPath = "/upload/thumbnailimage/";
        int pageSize = 3;
        int pageNumber = (page ?? 1);

        return View(await PagingList<BookListViewModel>.CreateAsync(model.AsQueryable() , pageNumber, pageSize));
    }

我还没有在index视图中写过关于分页的任何内容,它是一个简单的viewmodel列表

1 个答案:

答案 0 :(得分:0)

从您发布的代码中确实无法确定。但例外情况表明import { Pipe, PipeTransform } from '@angular/core'; @Pipe({ name: 'filter' }) export class FilterPipe implements PipeTransform { transform(value: string[], args = ""): any { return value.filter(item => item.startsWith(args)); } }方法需要{ "name": "helloapp", "version": "1.0.0", "description": "Hello App in Angular 5", "main": "index.js", "private": true, "scripts": { "start": "webpack-dev-server --hot", "build": "rimraf dist && webpack --config ./webpack-config/webpack.prod.js" }, "keywords": [], "dependencies": { "@angular/common": "5.1.2", "@angular/compiler": "5.1.2", "@angular/core": "5.1.2", "@angular/forms": "^5.1.2", "@angular/platform-browser": "5.1.2", "@angular/platform-browser-dynamic": "5.1.2", "bootstrap": "^3.3.7", "core-js": "2.5.3", "jquery": "^3.2.1", "rxjs": "5.5.6", "zone.js": "0.8.18" }, "devDependencies": { "@types/jquery": "^3.2.17", "@types/node": "^8.5.2", "angular2-template-loader": "^0.6.2", "awesome-typescript-loader": "^3.4.1", "css-loader": "^0.28.7", "extract-text-webpack-plugin": "^3.0.2", "file-loader": "^1.1.6", "html-loader": "^0.5.1", "html-webpack-plugin": "^2.30.1", "optimize-css-assets-webpack-plugin": "^3.2.0", "rimraf": "^2.6.2", "style-loader": "^0.19.1", "typescript": "2.5.3", "webpack": "^3.10.0", "webpack-dev-server": "^2.9.7", "webpack-merge": "^4.1.1" } },但您要给它CreateAsync

尝试更改它以传递IOrderedQueryable对象(如果您使用的是实体框架,我认为应该实现IQueryable。)

query(可能)背后的想法是使用它在数据库中进行分页。
你正在做的是将过滤后的集合带入内存(当通过结果时),然后进行分页。

代码可能如下所示:

IOrderedQueryable

希望它有所帮助。