2013-12-23 2 views
1

Я попытался отфильтровать предложение SelectList с предложением where, но я получаю следующую ошибку.Как фильтровать SelectList с помощью linq

Невозможно привести объект типа 'WhereEnumerableIterator`1 [System.Web.Mvc.SelectListItem]' к типу 'System.Web.Mvc.SelectList'.

public SelectList ReadDocumentHeaderTypeList() 
{ 
    using (context = new Pinc_DBEntities()) 
    { 
     List<SelectListItem> seList = 
      (from tb in context.tblDocumentHeaderTypes 
      select new SelectListItem 
      { 
       Value = SqlFunctions.StringConvert((double)tb.DocumentHeaderTypeID).Trim(), 
       Text = tb.DocumentHeaderTypeDescription, 
      }).OrderBy(o => o.Text).ToList(); 
     SelectList slist = new SelectList(seList, "Value", "Text"); 
     return slist; 
    } 
} 

SelectList sl = (SelectList)rep.ReadDocumentHeaderTypeList().Where(o => o.Value == "5" && o.Value == "6");//Error occurs here 

ответ

4

Ваш SelectList появляется индикация чтобы содержать список SelectListItem объектов. Я не уверен, что это выглядит внутренне, но вам нужно было предоставить список предметов новому экземпляру SelectList. Я полагаю, вам придется снова это сделать.

... = new SelectList(rep.ReadDocumentHeaderTypeList() 
         .Where(o => o.Value == "5" || o.Value == "6").ToList(), 
        "Value", "Text"); 
2

Изменить это:

SelectList sl = (SelectList)rep.ReadDocumentHeaderTypeList().Where(o => o.Value == "5" && o.Value == "6"); 

к этому:

SelectList sl = new SelectList(rep.ReadDocumentHeaderTypeList().Where(o => o.Value == "5" && o.Value == "6")); 

Вопрос именно то, что компилятор говорит вам, что результат Where не SelectList , Решение состоит в том, чтобы сделать один из результата.

Кроме того, обратите внимание, что ваш где положение проверяет, что Value равно 5и равной 6 который всегда будет ложным (предполагается, что Value является string)

Документация по SelectList constructor

+0

привет! мое плохое должно быть предложением OR. В вашем ответе все еще нужно было указать поля «Текст» и «Значение», как в ответе Гранта Винни. Другой текст отображается как «System.Web.MVC.SelectListItem». поэтому я собираюсь принять сообщение Гранта в качестве ответа, и у меня есть ответ на ваш ответ. благодаря! – chamara

Смежные вопросы