如何使用linq查询会话变量中的数据

时间:2011-12-23 18:18:04

标签: asp.net linq

在asp.net webform项目中,我有一个会话变量,我用我的业务对象填充数据。此对象包含Icollections,而Icollections又绑定到gridviews。

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

然后在网格上的行选择中,我检索所选行的对象ID

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

我很感激有关检索此数据的最佳方法的任何提示或建议

谢谢,

2 个答案:

答案 0 :(得分:1)

完全删除会话并直接查询数据库。会话仅使工作流程变得复杂并增加了内存使用量。

数据项在绑定到网格时也存储在viewstate中,因此您可以从绑定行中提取基础数据结构。

在任何一种情况下,都不要在这种情况下使用会话。

答案 1 :(得分:0)

如果您键入转换Session对象并将其放在闭包中,您应该能够在标准LINQ查询中使用它或对象中的任何集合属性,即:

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

我意识到我已经对你如何构建业务对象做了一些任意的决定,但是在不知道更多的情况下,我认为这应该足以证明这个概念。