我仍在学习ASP.NET,并且一直在尝试在线查找问题的答案,但是找不到与我想要的内容相关的任何内容。所以,我的问题是:
Session变量是否可以保存数据库中的记录,然后仅用于访问其中的某些列?有点像这样:
Session["Student"] = db.Students.Where(x => x.StudentNumber == studentNumber);
Session["Student"].SingleOrDefault().StudentId;
答案 0 :(得分:0)
您因为以下原因而收到该错误
Session["Student"] = db.Students.Where(x => x.StudentNumber == studentNumber);
不会在您的Session变量中存储Student。它在会话中保存查询。将其更改为Session["Student"] = db.Students.Single(x => x.StudentNumber == studentNumber);
或Session["Student"] = db.Students.SingleOrDefault(x => x.StudentNumber == studentNumber);
实现您想要的。
作为旁注,您可能应该在尝试将对象存储在会话中之前以及在使用对象之前对其进行检索时,应进行一些空引用检查。像这样:
var student = db.Students.SingleOrDefault(x => x.StudentNumber == studentNumber);
if(student != null)
{
Session["Student"] = student;
}
并将其取出:
var student = (Student)Session["Student"];
if(student != null)
{
// do something with the student
}
最后,几乎可以肯定有一种无需使用会话变量即可执行所需操作的更好方法。