2017-02-22 18 views
0

私はそのリストビューにデータをバインドするためのリストビューダイアログを持っています。クエリの結果を複数回列挙することはできません。

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 query..populateを使用して、指定された文字を含む値を再度表示します。私が今まで私は.ToListを追加したところ、「クエリの結果が複数回列挙することはできません」取得しています

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

以下の私のコードがあります()。私は何が恋しいのか分からない。

助けてください!

+1

エラーメッセージはむしろ自明です。クエリの結果を複数回取得しようとしています。あなたはそれをすることはできません。あなたは何を理解していないのですか?また、廃棄されたデータソースに基づいたクエリを実行しようとしているため、問題が発生する可能性があります。 – Servy

答えて

1

BindListViewでは、.ToList()を実行すると、最初にクエリが列挙されます。また、セッションに格納するのはクエリそのものです。 で.ToList()を再度実行すると、2回目のクエリが列挙されますが、これはサポートされていません。

あなたはむしろ、クエリよりも、セッション中に.ToList()の結果を格納する必要があります

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

ありがとう!あなたのソリューションは私の問題を解決します。 @トーマス – crony

0

あなたはSessionに保管されている価値LINQクエリではなく、クエリの結果です。 2度目の使用時(list.ToList())、このエラーが発生します。

これは、代わりに結果をリストとしてSessionに保存することで簡単に修正できます。

var res = oadb.prGetDailyCensusLookup(DCLookupMstr_Value, reportCatId, DCLookup_Value) 
       .ToList(); 
Session["LookupValues"] = res; 
lvLookup.DataSource = res; 
lvLookup.DataBind(); 
関連する問題