2017-02-22 30 views
0

我有一個listview對話框來將數據綁定到該列表視圖。查詢的結果不能枚舉多次。

private void BindListView(string DCLookupMstr_Value, int reportCatId, string DCLookup_Value = null) 

    {   

     using (Model.OperationalAnalyticsEntities oadb = new Model.OperationalAnalyticsEntities()) 
      { 
       var res = oadb.prGetDailyCensusLookup(DCLookupMstr_Value, reportCatId, DCLookup_Value); 
       Session["LookupValues"] = res; 
       lvLookup.DataSource = res.ToList(); 
       lvLookup.DataBind(); 
      }    
    } 

而且我在該列表視圖對話框中放置了一個搜索框(文本框)。如果用戶輸入任何文本/字符,使用LINQ查詢......再次使用包含給定字符的值填充列表視圖。我的代碼如下

protected void txtSearch_TextChanged(object sender, EventArgs e) 
    { 
     var text = txtSearch.Text; 
     //var list = new List<Model.prGetDailyCensusLookup_Result>(); 
     var lookUpValue = Session["LookupValues"] as ObjectResult<Model.prGetDailyCensusLookup_Result>; 
     var list = lookUpValue.Where(x => x.DCLookup_Value.Contains(text)); 

     lvLookup.DataSource = list.ToList(); 
     lvLookup.DataBind(); 
    } 

我得到的「查詢結果不能枚舉不止一次」在以往任何時候我加入.ToList()。我不確定我錯過了什麼。

請幫忙!

+1

錯誤消息是不言自明的。您正嘗試多次獲取查詢的結果。你不能那樣做。那你覺得怎麼樣?您還試圖執行基於處置數據源的查詢,因此這很可能也會給您帶來問題。 – Servy

回答

1

BindListView中,當您做.ToList()時,它首次枚舉查詢。你在會話中存儲的是查詢本身。當您再次在txtSearch_TextChanged中執行.ToList()時,它會再次枚舉該查詢,但不支持該查詢。

你應該的.ToList()結果存儲在會話中,而不是查詢:

Session["LookupValues"] = lvLookup.DataSource = res.ToList(); 
+0

謝謝!您的解決方案解決了我的問題。 @Thomas – crony

0

你珍惜你存儲在Session是LINQ查詢,而不是查詢的結果。第二次使用它(list.ToList())它會引發此錯誤。

這可以通過將結果作爲列表存儲在Session中而輕鬆解決。

var res = oadb.prGetDailyCensusLookup(DCLookupMstr_Value, reportCatId, DCLookup_Value) 
       .ToList(); 
Session["LookupValues"] = res; 
lvLookup.DataSource = res; 
lvLookup.DataBind();