2011-12-23 14 views
0

查詢會話變量中的數據我有一個會話變量,用來填充業務對象中的數據。這個對象包含Icollections,它依次綁定到gridviews。如何在一個asp.net webform項目中使用linq

myBase.GetAssocMInvolvedPeople(); //call to Business object 
    if (myBase.AssocMInvolvedPeople != null) 
    { 
    Session["sessBase"] = myBase; //sync session with object results 
    gv_Names.DataSource = myBase.AssocMInvolvedPeople; //bind Icollection to grid 
    gv_Names.DataBind(); 
    gv_Names.Visible = true; 
    } 

然後在網格我行選擇中檢索到所選行的對象標識

GridDataItem selectedItem = (GridDataItem)gv_Names.SelectedItems[0]; 
SecondaryID = selectedItem["ObjectId"].Text; 

的目標是把對象ID和查詢會話變量(sessBase)來檢索集合中剩餘的值(在網格中不可見),並以表單/文本字段格式顯示在UI中。我認爲最好的方法是使用Linq來查詢會話變量,但我在這裏停留在如何去做這個或訪問嵌套集合(AssocMInvolvedPeople)。

我假設的方法來設置此我會重置我的對象返回給會話變量:

protected void GetAdditionalData() 
{ 
myBase = (BusinesObjectName)Session["sessBase"]; 

//here is where I am stuck how to query this object and select the records based upon the selected ID 
    ... 
    } 

我將不勝感激,最好的辦法任何提示或建議來檢索該數據

謝謝

回答

0

如果類型轉換Session對象,並把它放在一個封閉,你應該能夠使用它或在標準LINQ查詢對象中的任何集合屬性,即:

var results = 
    from MyClass i in (Session["sessBase"] as MyBusinessObject).MyCollection 
    where secondaryID = i.ID 
    select i 

我意識到我已經對如何構建業務對象做了一些任意的決定,但是不知道更多,我認爲這應該足以展示這個概念。

+0

謝謝lthibodeaux,這是最接近原始問題的答案。這確實讓我能夠查詢對象。 – rlcrews 2011-12-24 01:15:04

1

完全刪除會話並直接查詢數據庫。會話只會使工作流程複雜化並增加內存使用量。

當綁定到網格時,數據項也存儲在視圖狀態中,因此您可以從綁定的行中獲取底層數據結構。

無論哪種情況,都不要在此場景中使用會話。

+0

Jason根據創建業務對象的方式,我使用了會話這個對象非常大,我認爲查詢這些數據與將它放到會話變量中會很昂貴。我無法在視圖狀態中設置網格的所有項目,因爲它確實會影響頁面性能和加載時間。在這個例子中,我有超過500個屬性返回,但我只在網格中顯示5。當選中該行時,我需要在ui中渲染剩餘的495個字段。 (是的,我知道但這些都是要求)。會話變量似乎是更好的方法。 – rlcrews 2011-12-23 19:06:48

+0

它已經處於視圖狀態,因爲您將網格綁定到集合。無論顯示與否都無關緊要。 – 2011-12-23 19:17:23

+0

感謝Jason的洞察力,我沒有意識到整個對象在視圖狀態下被序列化。 – rlcrews 2011-12-24 01:16:16

相關問題