2017-02-22 9 views
0

Ich habe einen Listview-Dialog, um Daten an diese Listenansicht zu binden.Das Ergebnis einer Abfrage kann nicht mehrfach aufgezählt werden.

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

Und ich legte ein Suchfeld (Textbox) auf diesem Listview-Dialog. Wenn der Benutzer einen beliebigen Text/Zeichen eingibt, verwendet linq query..die Liste erneut mit den Werten, die gegebene Zeichen enthalten. Mein Code ist unten

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

Ich erhalte das „Ergebnis einer Abfrage nicht mehr als einmal aufgezählt werden können,“ wo immer ich .ToList hinzugefügt(). Ich bin mir nicht sicher, was ich vermisst habe.

Bitte Hilfe!

+1

Die Fehlermeldung ist eher selbsterklärend. Sie versuchen, die Ergebnisse einer Abfrage mehr als einmal zu erhalten. Das kannst du nicht tun. Was verstehst du denn nicht? Sie versuchen auch, eine Abfrage auszuführen, die auf einer entsorgten Datenquelle basiert, sodass wahrscheinlich auch für Sie Probleme auftreten. – Servy

Antwort

1

In BindListView, wenn Sie .ToList() tun, zählt es die Abfrage zum ersten Mal auf. Und was Sie in der Sitzung speichern, ist die Abfrage selbst. Wenn Sie .ToList() erneut in txtSearch_TextChanged tun, zählt es die Abfrage ein zweites Mal auf, das nicht unterstützt wird.

Sie sollten das Ergebnis der .ToList() in der Sitzung speichern, anstatt die Abfrage:

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

Danke! Deine Lösung löst mein Problem. @Thomas – crony

0

Sie schätzen Sie sind in Session Speichern der LINQ-Abfrage ist, nicht das Ergebnis der Abfrage. Beim zweiten Mal (list.ToList()) wird dieser Fehler ausgegeben.

Dies kann leicht behoben werden, indem das Ergebnis als Liste in Session gespeichert wird.

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