开发者

Getting the value of an item from a SelectListItem List?

I have the following class:

public static IEnumerable<SelectListItem> GetDatastore()
{
    return new[]
        {
            new SelectListItem { Value = "DEV", Text = "Development"  },
            new SelectListItem { Value = "DC1", Text = "Production" },
        };
}

What I need is to execute a function to return the Datastore name. Something like

var abc = getDatastoreName("DEV"). 

Do I need to do this with LINQ or is there some easy way? How could I co开发者_StackOverflow中文版de this function?


public static string getDatastoreName(string name)
{
     var result = GetDatastore().SingleOrDefault(s => s.Value == name);
     if (result != null)
     {
         return result.Text;
     }
     throw /* some exception */
}

The Value property of SelectListItem is usually unique and hence I have SingleOrDefault(). If that is not the case then you can switch to using FirstOrDefault().


A simple LINQ query can find the value you want:

var val = dataStore.Where(d => d.Value == "DEV").FirstOrDefault();
//`val` will be the item, or null if the item doesn't exist in the list

But this is only good for small lists of items -- it's worst-case Order N.

If you wanted a better search, you could store your data as a dictionary with the keys being used as item values, for example, and databind against that rather than against a list of SelectListItems. That would allow you to look up the values constant time.

For most cases, simple LINQ will be fine. If you have a big list, or you're querying that list frequently... consider an alternative.


Maybe you are searching something like this i have "Details" page that works perfectly:

@Html.DisplayFor(model => model.Code1dItems.SingleOrDefault(m => m.Value == model.Code1Id.ToString()).Text, new { @class = "Width100P" })

In my model :

Code1Id is int value and it comes from database Code1dItems is IEnumerable value like 'GetDatastore' and returns ID->string, ID value matches with Code1d and Text->string

depending on your question you should use :

string abc = GetDatastore.SingleOrDefault(m => m.Value == "DEV").Text

if you get value from database you should use my code example.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜