2017-02-22 45 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 ... снова заполняйте listview со значениями, содержащими заданные символы. Мой код ниже

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(), он перечисляет запрос в первый раз. И то, что вы храните в сеансе, это сам запрос. Когда вы делаете .ToList() снова в txtSearch_TextChanged, он перечислит запрос во второй раз, который не поддерживается.

Вы должны сохранить результат .ToList() в сессии, а не запрос:

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

Спасибо! Ваше решение решает мою проблему. @Томас – 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(); 
Смежные вопросы