net mvc dropdownlist drop down asp asp.net drop-down-menu linq-to-objects

asp.net - mvc - Seleccione un ListItem de DropDownList usando una consulta de Linq



dropdownlistfor asp net (5)

Intento usar una consulta de Linq para encontrar y establecer el valor seleccionado en un control de lista desplegable.

Dim qry = From i In ddlOutcome.Items _ Where i.Text.Contains(value) Dim selectedItem As ListItem = qry.First ddlOutcome.SelectedValue = selectedItem.Value

Aunque la documentación dice que la colección DropDownList.Items implementa IEnumerable, aparece un error en la cláusula Where que Option Strict ON no permite el enlace tardío.


Mi vb.net es inestable, (c # chico) pero prueba:

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

Es posible que tenga mal la sintaxis de DirectCast, pero ya sabes de dónde vengo. El problema es que, en tiempo de compilación, Items no es verificable como una colección de ListItem porque la propiedad Actual de IEnumerable devuelve Object. Artículos no es una colección genérica.

-Oisin


Gracias por las sugerencias, ambos fueron útiles para llevarme a una solución factible. Aunque estoy de acuerdo en que el uso de los métodos de la lista desplegable debería ser el camino a seguir, no tengo una coincidencia exacta en el texto de los elementos de la lista, así que necesitaba otra forma.

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

La consulta de linq parece preferible a iterar a través de la lista, y aprendí algo en el proceso.


Puedo darte una respuesta en C #, y espero que te ayude.

La manera más fácil de usar los métodos de DropDownlist es mejor que la consulta de linq:

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

Si quieres la consulta de linq, sería así:

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


Alguien pensó en:

foreach (ListItem li in drp.Items.Cast<ListItem>().Where(li => li.Value == "")) { li.Selected = true; }


forma simple de seleccionar usando el siguiente código

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