2011-01-29 47 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];