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

Session变量转换报错:无法将OrderedEnumerable转为List<ReportDetails>如何解决

问题根因

  • 你存入Session["Grps"]的对象本身就不是List<ReportDetails>类型,是LINQ排序后生成的OrderedEnumerable延迟执行对象,它只实现了IEnumerable<ReportDetails>接口,没有继承List类型,直接强制转List必然抛出类型转换异常。
  • 你之前的两次尝试都存在语法错误:类型转换的括号配对错误,且强制转换的作用范围不对,没有先把Session取出的对象转成对应的可枚举接口类型。

解决方法

临时修复取数逻辑

直接将取出的对象先转成通用的可枚举接口,再调用ToList转成列表即可,可兼容空值的写法如下:

data = (Session["Grps"] as IEnumerable<ReportDetails>)?.ToList() ?? new List<ReportDetails>();

如果需要显式判空可以按下面的方式写:

if (Session["Grps"] != null)
{
    data = (Session["Grps"] as IEnumerable<ReportDetails>).ToList();
}
else
{
    // 为空时初始化空列表避免后续逻辑触发空引用异常
    data = new List<ReportDetails>();
}

根本优化方案

建议在存入Session的时候就把LINQ查询的延迟执行对象转换为实列表,避免后续取数时反复处理类型问题,存数时写法示例:

// 排序查询完成后直接调用ToList执行查询,再存入Session
var grps = 你的数据查询逻辑.OrderBy(x => x.排序字段).ToList();
Session["Grps"] = grps;

后续取数就可以直接强转List类型:

data = Session["Grps"] as List<ReportDetails> ?? new List<ReportDetails>();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 16:54:04