2013-03-11 2 views
0

나는 Session에 쿼리의 결과를 저장하여 PageIndexChanging 이벤트로 전달해야합니다.세션에서 Linq 쿼리를 저장 중

쿼리를 실행하면 cannot access disposed object 예외가 발생합니다.

내가 그리드 그때 내가 그래서이 Session을 설정하는 방법 PageIndexChanging 이벤트

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

에서 사용하기 위해 애 쓰고 Session

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

Session["ResultQuery"] = result; 

에 쿼리를 추가하고 바인딩

PageIndexChanging 이벤트에서 사용할 수 있습니다.

+0

정확한 사례가이 경우에 무엇인지 모르겠지만 'ToString'은 분명히 자신의 상황을 돕지 않습니다. – user7116

+0

.ToList() 또는 .FirstOrDefault() 등을 호출하여 서버에서 linq 쿼리를 실행 했습니까? 하지만 내 질문은 어디에 linq 쿼리입니까? 나는 그것을 보지 않는다. –

+0

@sixlettervariables 아니, 그 사람의 결과가 문자열이라고 생각하지 않는다 :) –

답변

3

대신 result.ToList()을 유지하십시오.

당신이 LINQ 쿼리의 출력을 저장

, 당신은 실제로 실행해야 쿼리의 단지 정의IEnumerable<T> 또는 IQueryable<T>를 저장한다. 결과를 반복 할 때마다 전체 쿼리가 실행되므로 기본 데이터 (아마도 EntityFramework 데이터 컨텍스트)를 사용할 수 있어야합니다. 그렇지 않을 수도 있습니다. 결과에 ToList()을 호출하면 구체화되고 결과를 캐시합니다. 이제 원본 쿼리에 대해 전혀 알지 못하는 List<T>이 있습니다. 결과 데이터 만입니다.

+0

OP가 해당 개체를 업데이트/변경하려고하면 해당 개체를 L2S 컨텍스트에 다시 연결해야합니다. – user7116

+0

사용자가 결과를 선택할 수 있도록 결과 페이지 만 표시하려고합니다. 어느 것이 이미 작동하는지는 목록이 너무 길었던 것입니다. – StudentRik

2

나는 실제 오류가 아니라 세션에 IQueryable을 저장한다는 오류가 있다고 생각합니다. esult, 결과를 저장하기 전에 ToList() 또는 simular를 수행하십시오.

0

(T)Session["ResultQuery"] 일반적인 것을 사용하십시오.

샘플 사용;

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