【问题标题】:How to query data within a session variable using linq如何使用 linq 查询会话变量中的数据
【发布时间】:2011-12-23 18:18:04
【问题描述】:

在一个 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 
    ...
    }

如果有任何关于检索此数据的最佳方法的提示或建议,我将不胜感激

谢谢你,

【问题讨论】:

    标签: asp.net linq


    【解决方案1】:

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

    数据项在绑定到网格时也存储在视图状态中,因此您可以从绑定的行中拉出底层数据结构。

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

    【讨论】:

    • Jason 我根据业务对象的创建方式使用会话,这个对象非常大,我认为查询这些数据而不是把它放在会话变量中会很昂贵。我无法在视图状态中设置网格的所有项目,因为它确实会影响页面性能和加载时间。在这个例子中,我返回了 500 多个属性,但我只在网格中显示了 5 个。选择该行后,我需要在 ui 中呈现剩余的 495 个字段。 (是的,我知道,但这些是要求)。会话变量似乎是更好的方法。
    • 它已经处于视图状态,因为您将网格绑定到集合。是否显示无关紧要。
    • 感谢 Jason 的洞察,我没有意识到整个对象正在视图状态中被序列化。
    【解决方案2】:

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

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

    我意识到我对您如何构建业务对象做出了一些武断的决定,但在不了解更多信息的情况下,我认为这应该足以证明这个概念。

    【讨论】:

    • 感谢 lthibodeaux,这与原始问题的答案最接近。这确实让我可以访问对象进行查询。
    猜你喜欢
    • 1970-01-01
    • 2020-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-25
    • 1970-01-01
    • 2018-06-29
    • 2016-09-02
    相关资源
    最近更新 更多