C# 如何从会话对象读取值
在Linq中使用sql server存储过程,我将问题列表存储在会话对象中,如下所示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
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.List1[sp_GetAllQuestionsResult]'类型的对象强制转换为'System.Collections.Generic.List
1[Questions]”。这意味着您的类型不同。当你试图读取时,你保存的对象必须是同一类型。我理解你关于以同一对象类型存储和检索的说法,但这种情况是否有解决办法?你可以将存储的对象映射到其他类型我已经尝试过了,但出现了一个异常“无法将类型为“System.Collections.Generic.List1[sp_GetAllQuestionsResult]”的对象强制转换为类型为“System.Collections.Generic.List
1[Questions]”。“这意味着你的类型不同。当您试图读取时,您保存的对象必须是同一类型。我理解您关于以同一对象类型存储和检索对象的说法,但这种情况是否有解决办法?您可以将存储的对象映射到其他类型