从SelectListItem列表中获取项的值?

时间:2011-06-23 13:17:03

标签: c# list

我有以下课程:

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

我需要的是执行一个函数来返回数据存储区名称。像

这样的东西
var abc = getDatastoreName("DEV"). 

我是否需要使用LINQ执行此操作,还是有一些简单的方法?我怎么能编写这个函数?

3 个答案:

答案 0 :(得分:2)

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

Value的{​​{1}}属性通常是唯一的,因此我有SelectListItem。如果不是这样,那么您可以切换到使用SingleOrDefault()

答案 1 :(得分:2)

简单的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

但这只适用于小型物品清单 - 这是最坏情况的订单N.

如果您想要更好的搜索,您可以将数据存储为字典,其中键用作项目值,例如,数据绑定对象而不是SelectListItems列表。这将允许您查找值恒定时间。

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

答案 2 :(得分:0)

也许你正在搜索这样的东西 我有“详细信息”页面完美运行:

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

在我的模特中:

Code1Id是int值,它来自数据库Code1dItems是IEnumerable 值类似'GetDatastore'并返回ID-&gt;字符串,ID值匹配Code1d和Text-&gt; string

取决于您应该使用的问题:

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

如果你从数据库中获得价值,你应该使用我的代码示例。

相关问题