从SelectListItem列表中获取项的值

本文关键字:获取 SelectListItem 列表 | 更新日期: 2023-09-27 18:00:25

我有以下类:

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

我需要的是执行一个函数来返回数据存储名称。类似的东西

var abc = getDatastoreName("DEV"). 

我需要用LINQ做这件事吗?或者有什么简单的方法吗?如何对该函数进行编码?

从SelectListItem列表中获取项的值

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

SelectListItemValue性质通常是唯一的,因此我有SingleOrDefault()。如果不是这样,那么您可以切换到使用FirstOrDefault()

一个简单的LINQ查询可以找到您想要的值:

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

但这只适用于小的项目列表——这是最坏的订单号。

如果您想要更好的搜索,您可以将数据存储为字典,例如,将键用作项值,并根据该字典而不是SelectListItems列表进行数据绑定。这将允许您查找常量时间的值。

在大多数情况下,简单的LINQ就可以了。如果你有一个大列表,或者你经常查询这个列表。。。考虑一个替代方案。

也许您正在搜索类似的内容我有一个"详细信息"页面,工作非常完美:

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

在我的模型中:

Code1Id是int值,它来自数据库Code1dItems是IEnumerable值类似于"GetDatastore"并返回ID->string,ID值与Code1d和Text->string 匹配

根据你的问题,你应该使用:

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

若您从数据库中获得值,则应该使用我的代码示例。