You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET Core 8使用X.PagedList时InvalidCastException错误排查

问题分析与解决

错误根源

你碰到的InvalidCastException是因为Linq的OrderBy/OrderByDescending方法返回的是OrderedEnumerable<TSource, TKey>类型,并非直接的List<TSource>,直接用(List<T>)强制转换必然失败。ASP.NET 4.8的PagedList可能内部做了隐式兼容处理,但X.PagedList在ASP.NET Core中遵循更严格的类型匹配规则。

修正步骤

假设你原来的错误代码类似这样:

// 错误示例
var sortedData = (List<YourModel>)dbContext.YourEntities.OrderBy(x => x.Id);
var pagedData = sortedData.ToPagedList(pageNumber, pageSize);

改成以下两种正确写法之一:

  • 写法1:先通过ToList()显式转换为List再分页
var sortedData = dbContext.YourEntities.OrderBy(x => x.Id).ToList();
var pagedData = sortedData.ToPagedList(pageNumber, pageSize);
  • 写法2(推荐):直接对IQueryable执行分页(X.PagedList支持IQueryable,能利用EF的查询优化,只加载当前页数据)
var pagedData = dbContext.YourEntities.OrderBy(x => x.Id).ToPagedList(pageNumber, pageSize);

关键注意点

  • 绝对不要对Linq排序后的结果直接强制转换为List<T>,必须通过ToList()方法显式转换,或者用IQueryable/IEnumerable类型接收排序结果。
  • 优先使用直接对IQueryable分页的写法,避免一次性加载全量数据到内存,提升性能。

内容的提问来源于stack exchange,提问作者joegreen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 01:02:36