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
...
}
我很感激有关检索此数据的最佳方法的任何提示或建议
谢谢,
答案 0 :(得分:1)
完全删除会话并直接查询数据库。会话仅使工作流程变得复杂并增加了内存使用量。
数据项在绑定到网格时也存储在viewstate中,因此您可以从绑定行中提取基础数据结构。
在任何一种情况下,都不要在这种情况下使用会话。
答案 1 :(得分:0)
如果您键入转换Session对象并将其放在闭包中,您应该能够在标准LINQ查询中使用它或对象中的任何集合属性,即:
var results =
from MyClass i in (Session["sessBase"] as MyBusinessObject).MyCollection
where secondaryID = i.ID
select i
我意识到我已经对你如何构建业务对象做了一些任意的决定,但是在不知道更多的情况下,我认为这应该足以证明这个概念。