Выберите ListItem из DropDownList с помощью запроса Linq

Я пытаюсь использовать запрос Linq, чтобы найти и установить выбранное значение в раскрывающемся списке.

 Dim qry = From i In ddlOutcome.Items _
           Where i.Text.Contains(value)


 Dim selectedItem As ListItem = qry.First

 ddlOutcome.SelectedValue = selectedItem.Value

Несмотря на то, что в документации говорится, что коллекция DropDownList.Items реализует IEnumerable, я получаю сообщение об ошибке в предложении Where, что Option Strict ON запрещает позднее связывание!


person TGnat    schedule 24.11.2008    source источник


Ответы (5)


Я могу дать вам ответ на С#, и я надеюсь, что это поможет вам.

Проще всего использовать методы DropDownlist, лучше чем linq query:

DropDownList1.SelectedIndex = 
       DropDownList1.Items.IndexOf(DropDownList1.Items.FindByText("2"));

Если вам нужен запрос linq, он будет выглядеть так:

var selected=from i in DropDownList1.Items.Cast<ListItem>()
                     where ((ListItem)i).Text.Contains("2") select i;

DropDownList1.SelectedValue = selected.ToList()[0].Text;
person netadictos    schedule 24.11.2008

Кто-нибудь думал о:

foreach (ListItem li in drp.Items.Cast<ListItem>().Where(li => li.Value == ""))
{
    li.Selected = true;
}
person matt_lethargic    schedule 20.09.2012
comment
Превосходно! Это именно то, о чем я думал! - person dotnetN00b; 14.01.2014

Спасибо за предложения, они оба помогли мне найти работоспособное решение. Хотя я согласен с тем, что следует использовать методы самого выпадающего списка, у меня нет точного соответствия тексту элементов в списке, поэтому мне нужен другой способ.

    Dim qry = From i In ddlOutcome.Items.Cast(Of ListItem)() _
              Where i.Text.Contains(value)

    qry.First().Selected = True

Запрос linq кажется предпочтительнее самостоятельного повторения списка, и я кое-чему научился в процессе.

person TGnat    schedule 25.11.2008
comment
У меня есть причина использовать FirstOrDefault в этих ситуациях, чтобы избежать проблем с нижестоящими. Проверить на ноль! - person Allen; 31.10.2015
comment
другой ответ для справки, кажется, Selected имеет то же значение, что и Checked stackoverflow.com/questions/18924147/ - person yu yang Jian; 13.06.2017

Мой vb.net шаткий (с# парень), но попробуйте:

Dim qry = From DirectCast(i, ListItem) In ddlOutcome.Items ...

У меня может быть неправильный синтаксис DirectCast, но вы знаете, откуда я. Проблема в том, что во время компиляции Items нельзя проверить как коллекцию ListItem, потому что свойство Current IEnumerable возвращает Object. Items не является универсальной коллекцией.

-Ойсин

person x0n    schedule 24.11.2008

простой способ выбрать, используя следующий код

foreach (ListItem i in DropDownList1.Items)
   {
      DropDownList1.SelectedValue = i.Value;
     if (DropDownList1.SelectedItem.Text=="text of your DropDownList")
       {
         break;
       }
    }
person Community    schedule 23.12.2008