2011-01-29 88 views
1

如何在会话中创建对象字典?更具体地说,我有一个对象列表:MyList存储MyObject作为linq查询的结果,并将日期作为参数。在会话中存储字典

List<MyObject> Mylist; 
MyList = GetObjects(TheDate); 

现在我想将MyList存储在日期为键的字典中的会话对象中。当页面需要特定日期的MyList时,首先搜索字典,如果该日期为空,则从GetObjects查询中获取数据并将结果存储在会话的字典中。

这样做的最好方法是什么?

谢谢。

+0

我试图创建一个命名空间称为ObjectsSessions内不同的文件名为MyDictio的对象。当我尝试“public class Dictionary ...”时,我没有在Dictionary关键字上获得智能感知。我在哪里申报这本词典,以便它在每个页面中都可用? – frenchie 2011-01-29 17:09:03

+0

尝试`使用System.Collections.Generic;` – BrokenGlass 2011-01-29 17:10:21

回答

7

样品用于存储会话词典:

List<MyObject> Mylist; 
MyList = GetObjects(TheDate); 
Dictionary<DateTime> myDictionary = new Dictionary<DateTime>(); 
myDictionary[TheDate] = MyList; 
Session["DateCollections"] = myDictionary; 

样品从会话检索(应该有null检查,以确保它的存在):

Dictionary<DateTime> myDictionary = (Dictionary<DateTime>) Session["DateCollections"]; 
2

我会建立某种形式的门面围绕访问会话变量,这使得检索和设置值非常容易。另外,您不必担心会话var名称是否正确,因为它们都存储在同一个地方。例如:

public static class SessionVars 
{ 
    public static Dictionary<DateTime> DateCollections 
    { 
     get { return (Dictionary<DateTime>)HttpContext.Current.Session["DateCollections"]; } 
     set { HttpContext.Current.Session["DateCollections"] = value; } 
    } 
} 

然后访问它的任何地方在你的代码应该是这样的:

var List<MyObject> mylist = SessionVars.DateCollections[TheDate];