【问题标题】:Storing Linq Query In Session在会话中存储 Linq 查询
【发布时间】:2015-09-17 18:44:44
【问题描述】:

我正在尝试将 Query 的结果存储在 Session 中以传递给 PageIndexChanging 事件。

当我运行查询时,我得到了异常 cannot access disposed object

当我绑定网格时,我将查询添加到 Session

pnl_results.Visible = true;
ResultsGridView.DataSource = result;
ResultsGridView.DataBind();

Session["ResultQuery"] = result;

然后我尝试在PageIndexChanging事件中使用它

protected void ResultsGridView_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
    var gridResult = Session["ResultQuery"].ToString();
    ResultsGridView.PageIndex = e.NewPageIndex;
    ResultsGridView.DataSource = gridResult;
    ResultsGridView.DataBind();
}

如何设置Session,以便在PageIndexChanging 事件中使用它

【问题讨论】:

  • 我不确定在这种情况下确切的最佳做法是什么,但 ToString 肯定对您的情况没有帮助。
  • 您是否通过调用 .ToList() 或 .FirstOrDefault() 等在服务器上执行 linq 查询?但我的问题是你的 linq 查询在哪里?我没看到。
  • @sixlettervariables nope 我不认为他的结果是一个字符串:)
  • 我投票关闭作为asp.net gridview paging 的副本,因为您应该重新查询而不是将结果存储在 Session 对象中。如果不重新运行查询,您可能会遇到问题。
  • .ToList() 有效,但现在我的PageIndexChanging 中有一个新错误..The data source does not support server-side data paging.

标签: c# asp.net linq


【解决方案1】:

保留result.ToList() 而不是result

当您存储 LINQ 查询的输出时,实际上是在存储 IEnumerable<T>IQueryable<T>,这只是应该运行的查询的定义。每次迭代结果时,整个查询都会运行,因此底层数据(可能是 EntityFramework 数据上下文)需要可用,但可能不可用。通过在结果上调用ToList(),您实现查询并缓存结果。现在你有一个List<T>,它对原始查询一无所知。这只是结果的数据。

【讨论】:

  • 请记住,如果 OP 想要更新/更改这些对象,他们必须将它们重新附加到 L2S 上下文。
  • 我只想对结果进行分页,以便用户可以选择结果。这已经可行,只是列表太长了。
【解决方案2】:

我认为错误是您将 IQueryable 存储在会话中而不是实际结果,请尝试在存储结果之前执行 ToList() 或类似操作;

【讨论】:

    【解决方案3】:

    (T)Session["ResultQuery"]generic like using please.

    使用示例;

    protected void ResultsGridView_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        // var gridResult = Session["ResultQuery"].ToString();
        var gridResult = (Product)Session["ResultQuery"];
        ResultsGridView.PageIndex = e.NewPageIndex;
        ResultsGridView.DataSource = gridResult;
        ResultsGridView.DataBind();
    }
    

    【讨论】:

      猜你喜欢
      • 2013-12-13
      • 2017-06-02
      • 2010-12-30
      • 2021-06-08
      • 1970-01-01
      • 1970-01-01
      • 2023-03-03
      • 2012-04-21
      • 1970-01-01
      相关资源
      最近更新 更多