用linq取出foreach

Joo*_*ark 2 c# linq

有没有办法在linq中的以下代码中取出foreach但产生相同的输出?

    DropDownList ddl = new DropDownList();
    foreach (DataRow row in ds.Tables[0].Rows)
    {
        if ((byte)row["ListTypeID"] == 0)
        {
            item = new ListItem(row["ListText"].ToString(), string.Format("{0}:{1}", row["ListTypeID"].ToString(), row["ListID"].ToString()));
            ddl.Items.Add(item);
        }
        else
        {
            item = new ListItem(row["ListText"].ToString(), string.Format("{0}", row["ListID"].ToString()));
            ddl.Items.Add(item);
        }
    }
Run Code Online (Sandbox Code Playgroud)

Pet*_*old 5

我没有把所有东西塞进一行lambda,而是更喜欢可读性而不是节省行空间:

ddl.Items.AddRange(ds.Tables[0].Rows.Select( row => 
    {
        var listText = row["ListText"];
        var listTypeId = (byte)row["ListTypeID"];
        var listId = row["ListID"];

        var format = listTypeId == 0 ? "{0}:{1}" : "{1}";
        var itemText = String.Format(format, listTypeID, listId);

        return new ListItem(listText, itemText);
    }
    ));
Run Code Online (Sandbox Code Playgroud)