DropDownList'te LINQ ile seçim yapma

Items kolleksiyonu üzerinde LINQ sorgusu çalıştırabiliriz.

DropDownList'e eklediğimiz Item'lar içerisinde istediğimiz bir Item'ı nasıl seçebiliriz?

Items kolleksiyonu IEnumarable interface ini desteklemediği için direkt olarak LINQ sorgusunu Items kolleksiyonu üzerinde çalıştıramayız.

Bunu gerçekleştirmek için Cast operatörü tam bize göre.

Aşağıdaki kodu inceleyiniz:

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        // öncelikle dropdown a bilgileri yükleyelim
        // db den de getirebilirdik
        ddlIller.DataSource = IlleriGetir();
        ddlIller.DataTextField = "Il";
        ddlIller.DataValueField = "Id";
        ddlIller.DataBind();
    }
        
}

private List<IlInfo> IlleriGetir()
{
    List<IlInfo> iller = new List<IlInfo>{
        new IlInfo{ Id=1, Il="Adana"},
        new IlInfo{ Id=2, Il="Adıyaman"},
        new IlInfo{ Id=3, Il="Afyon"},
        new IlInfo{ Id=4, Il="Ağrı"},
        new IlInfo{ Id=5, Il="Amasya"},
        new IlInfo{ Id=6, Il="Ankara"},
        new IlInfo{ Id=7, Il="Antalya"}
    };
    return iller;
}
protected void btnSec_Click(object sender, EventArgs e)
{
    // hangi id ye sahip il seçilecek?
    int secilecekId = 5;

    // aynı anda 2 farklı item seçilemez
    // dolayısıyla önceki seçimleri iptal etmeliyiz
    ddlIller.ClearSelection();

    // items kolleksiyonu üzerinde linq sorgusu çalıştıramayız
    // o yüzden Cast<>() metodu ile IEnumarable<ListItem> türüne çevrim yapıyoruz.
    // sonra da istediğimiz linq sorgularını çalıştırabiliriz
    ddlIller.Items
            .Cast<ListItem>()
            .FirstOrDefault(x => x.Value == secilecekId.ToString())
            .Selected = true;

}

Aynı işlemi ListBox üzerinde de kullanabiliriz.

Bu arada IlInfo sınıfını da paylaşayım:

public class IlInfo
{
    public int Id { get; set; }
    public string Il { get; set; }
}

Aynı işlemi Items.FindByValue() ve Items.FindByText() metodları ile de gerçekleştirebilirdik.

Amacımız IEnumarable interface ini desteklemeyen veriler üzerinde LINQ sorgusu çalıştırabilmek olduğu için bu bilgiyi sizlerle paylaşmak istedim.