C# 如何从会话对象读取值

C# 如何从会话对象读取值,c#,asp.net,linq,C#,Asp.net,Linq,在Linq中使用sql server存储过程,我将问题列表存储在会话对象中,如下所示 DataClassesDataContext myContext = new DataClassesDataContext(); var QuestionList = myContext.sp_GetAllQuestions().ToList(); Session["QuestionsList"] = QuestionList; 如何读取或强制转换此会话对象的值 var QuestionList= Sessi

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

DataClassesDataContext myContext = new DataClassesDataContext();
var QuestionList = myContext.sp_GetAllQuestions().ToList();
Session["QuestionsList"] = QuestionList;
如何读取或强制转换此会话对象的值

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
List QuestionList=会话[“QuestionsList”]作为列表;
列表问题列表=(列表)会话[“问题列表”];
必须具有相同类型的对象才能强制转换,并且必须是可序列化的

如果无法转换,第一个选项将为null,第二个选项将崩溃

List QuestionList=会话[“QuestionsList”]作为列表;
列表问题列表=(列表)会话[“问题列表”];
必须具有相同类型的对象才能强制转换,并且必须是可序列化的


如果无法转换,第一个选项将为null,第二个选项将崩溃

实际上取决于您的
问题列表
所代表的类型,但如果您假设
问题列表
是一个
列表
,则您需要如下内容:

var QuestionList= Session["QuestionsList"] as List<Question>;
var QuestionList=Session[“QuestionsList”]作为列表;

实际上取决于您的
问题列表所代表的类型,但如果您假设
问题列表
是一个
列表
,则您需要如下内容:

var QuestionList= Session["QuestionsList"] as List<Question>;
var QuestionList=Session[“QuestionsList”]作为列表;
当你想要得到会话对象时

News newList=Session["news"] as News;
你必须投出一个会话,像那样使用

当你想要得到会话对象时

News newList=Session["news"] as News;

你必须施放会话。像这样使用这就是使用
var
推断类型的地方

明确说明问题列表的类型,如下所示:

List<sp_GetAllQuestionsResult> QuestionList = = myContext.sp_GetAllQuestions().ToList();
Session["QuestionsList"] = QuestionList;
List<sp_GetAllQuestionsResult> QuestionList= Session["QuestionsList"] as List<sp_GetAllQuestionsResult>;

// Check if the list is null or not
if(QuestionList != null)
{
    // Safe to use list because it was found and successfully cast

}

这就是使用
var
推断类型的地方

明确说明问题列表的类型,如下所示:

List<sp_GetAllQuestionsResult> QuestionList = = myContext.sp_GetAllQuestions().ToList();
Session["QuestionsList"] = QuestionList;
List<sp_GetAllQuestionsResult> QuestionList= Session["QuestionsList"] as List<sp_GetAllQuestionsResult>;

// Check if the list is null or not
if(QuestionList != null)
{
    // Safe to use list because it was found and successfully cast

}

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

包装器底座:

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;
            }
        }
    }

}
当您要从会话中清除/删除它时:

QuestionCollectionSession.Clear();

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

包装器底座:

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;
            }
        }
    }

}
当您要从会话中清除/删除它时:

QuestionCollectionSession.Clear();

我已经尝试过了,但是出现了一个异常“无法将'System.Collections.Generic.List
1[sp_GetAllQuestionsResult]'类型的对象强制转换为'System.Collections.Generic.List
1[Questions]”。这意味着您的类型不同。当你试图读取时,你保存的对象必须是同一类型。我理解你关于以同一对象类型存储和检索的说法,但这种情况是否有解决办法?你可以将存储的对象映射到其他类型我已经尝试过了,但出现了一个异常“无法将类型为“System.Collections.Generic.List
1[sp_GetAllQuestionsResult]”的对象强制转换为类型为“System.Collections.Generic.List
1[Questions]”。“这意味着你的类型不同。当您试图读取时,您保存的对象必须是同一类型。我理解您关于以同一对象类型存储和检索对象的说法,但这种情况是否有解决办法?您可以将存储的对象映射到其他类型