我尝试将列表复制到会话,但是我尝试下面的代码为null。
var questions = dbContext.Sft_Set.Where(s => s.Sft_Set_ID == currentSet)
.Select(s => new
{
id = s.Sft_Set_ID,
qid = s.Sft_QuestionID,
qName = s.Sft_Question.Q_Question,
qtype = s.Sft_Question.Q_Type
}).ToList();
Session["questionList"] = questions;
var list = Session["questionList"] as List<Sft_Set>;
答案 0 :(得分:1)
不能。
阻止词为anonymous
。您无法取消匿名类型的装箱,因为在该框中没有任何已知信息。 (我没有尝试使用dynamic
,但没有更优雅的方法)
如vc所说,代码应为:
var questions = dbContext.Sft_Set.Where(s => s.Sft_Set_ID == currentSet)
.Select(s => new
Sft_Set { // <===============================
id = s.Sft_Set_ID,
qid = s.Sft_QuestionID,
qName = s.Sft_Question.Q_Question,
qtype = s.Sft_Question.Q_Type
}).ToList();
Session["questionList"] = questions;
var list = Session["questionList"] as List<Sft_Set>;
或更可能是
public class SomeDTOType {
public int id {get; set;}
public int qid {get; set;}
public string qname {get; set;}
public int qtype {get; set;}
}
var questions = dbContext.Sft_Set.Where(s => s.Sft_Set_ID == currentSet)
.Select(s => new
SomeDTOType { // <===============================
id = s.Sft_Set_ID,
qid = s.Sft_QuestionID,
qName = s.Sft_Question.Q_Question,
qtype = s.Sft_Question.Q_Type
}).ToList();
Session["questionList"] = questions;
var list = Session["questionList"] as List<SomeDTOType>;
答案 1 :(得分:1)
@ vc74在其评论中说list
为空,因为您已将匿名对象列表放入会话中,并尝试使用as
关键字将此列表转换为{{1} }对象。
由于无法将您的匿名对象列表强制转换为List<Sft_Set>
,因此得到的结果为List<Sft_Set>
。这并不意味着您的Session [“ questionList”]为null,仅表示无法进行强制转换。
因此,您可以使用以下选项来解决该问题:
null
声明为list
,并且不要使用as运算符。这意味着您将没有dynamic
以下是第二个选项的代码示例:
list