我使用下面的LINQ码来查找DropDownList选定值
string txtnewrole = ddlRoleList.Items.FindByText("Admin").ToString();
ListItem item = (from i in ddlRoleList.Items.Cast<ListItem>()
where ((ListItem)i).Value.Contains(txtnewrole)select i).First()as ListItem;
string roleid = ddlRoleList.Items.FindByValue(item.Value).ToString();
Linq语句给我错误,序列不包含元素,请帮助我纠正这个错误,我尝试了第一个默认值,它返回给我null,但在我的DropDownList中,我有值为2的管理员文本,我写这个linq来获取admin的值,项值为null。如何做到这一点?
发布于 2014-02-02 16:32:12
使用FirstOrDefault()
代替First()
,然后检查item是否不为null。如果sequence不包含元素,但在这种情况下FirstOrDefault()
返回null,则First()
抛出异常。
另请注意,此代码
string txtnewrole = ddlRoleList.Items.FindByText("Admin").ToString();
返回像System.Web.UI.WebControls.ListItem
这样的东西我不确定它是否就是你想要的。除非您使用扩展方法重写ToString()
。
发布于 2014-02-02 17:02:35
我想在@Daniel的回答中添加更多的观点。
ddlRoleList.Items.FindByText("Admin").ToString()
时,可能会出现NULL
异常。如果ddlRoleList.Items.FindByText("Admin")
没有找到它,它会返回"NULL".ddlRoleList.Items.FindByValue(item.Value).ToString();
的正确用法。在这里,您再次尝试按值查找并转换为字符串。因为您已经从Linq
中找到了item
。你需要做的是item.Text
如果你能更好地理解,我以适当的方式为你写了以下代码:
String txtNewRole = String.Empty;
String roleId = String.Empty;
ListItem adminListItem = ddlRoleList.Items.FindByText("Admin");
if (adminListItem != null)
txtNewRole = adminListItem.Text;
//ListItem item = ddlRoleList.Items.Cast<ListItem>().Where(i => i.Value.Contains(txtNewRole)).Select(i => i).FirstOrDefault();
//OR
ListItem item = ddlRoleList.Items.Cast<ListItem>().FirstOrDefault(i => i.Value.Contains(txtNewRole));
if (item != null)
roleId = item.Text;
https://stackoverflow.com/questions/21508554
复制相似问题