gpt4 book ai didi

c# - 如何从 session 对象中读取值

转载 作者:太空宇宙 更新时间:2023-11-03 19:13:24 25 4
gpt4 key购买 nike

在 Linq 中使用 sql server 存储过程,我将问题列表存储在 session 对象中,如下所示。

DataClassesDataContext myContext = new DataClassesDataContext();
var QuestionList = myContext.sp_GetAllQuestions().ToList();
Session["QuestionsList"] = QuestionList;

我如何从这个 session 对象中读取或转换值

var QuestionList= Session["QuestionsList"]

SQL存储过程是这样的

SELECT top 24 ROW_NUMBER() OVER (ORDER BY QuestionID) AS QuestionNo,Q.QuestionID,Q.Question,Q.Choices,Q.CorrectAnswer,
Q.RelatedInfo,Q.QuestionType,CS.Section FROM Questions Q left join dbo.ChapterSection CS on Q.SectionID=CS.SectionID

最佳答案

我不喜欢每周类型 session ,因为每次使用都需要类型转换,所以我将所有类型/对象包装在一个强类型 session 包装器中。

包装基础:

public abstract class SessionBase<T> : SessionBase where T : new()
{
private static readonly Object _padlock = new Object();

private static string Key
{
get { return typeof(SessionBase<T>).FullName; }
}

public static T Current
{
get
{
var instance = HttpContext.Current.Session[Key] as T;

if (instance == null)
{
lock (SessionBase<T>._padlock)
{
if (instance == null)
{
HttpContext.Current.Session[Key] = instance = new T();
}
}
}

return instance;
}
}

public static void Clear()
{
var instance = HttpContext.Current.Session[Key] as T;
if (instance != null)
{
lock (SessionBase<T>._padlock)
{
HttpContext.Current.Session[Key] = null;
}
}
}

}

现在创建一个对象(将其标记为可序列化帮助)

[Serializable]
public QuestionCollection
{
public QuestionCollection()
{
this.Questions = new List<Question>();
}

public List<Question> Questions { get; set; }
}

现在使 QuestionCollection 成为强类型的 QuestionCollectionSession

public QuestionCollectionSession : SessionBase<QuestionCollection>
{
}

现在你可以像这样使用它:

QuestionCollectionSession.Current.Questions.Add("Are you there?");

当你想从 session 中清除/删除它时:

QuestionCollectionSession.Clear();

关于c# - 如何从 session 对象中读取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18859735/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com