首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >linq序列不包含任何元素错误

linq序列不包含任何元素错误
EN

Stack Overflow用户
提问于 2014-02-02 16:27:58
回答 2查看 4.3K关注 0票数 1

我使用下面的LINQ码来查找DropDownList选定值

代码语言:javascript
运行
复制
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。如何做到这一点?

EN

回答 2

Stack Overflow用户

发布于 2014-02-02 16:32:12

使用FirstOrDefault()代替First(),然后检查item是否不为null。如果sequence不包含元素,但在这种情况下FirstOrDefault()返回null,则First()抛出异常。

另请注意,此代码

代码语言:javascript
运行
复制
string txtnewrole = ddlRoleList.Items.FindByText("Admin").ToString(); 

返回像System.Web.UI.WebControls.ListItem这样的东西我不确定它是否就是你想要的。除非您使用扩展方法重写ToString()

票数 4
EN

Stack Overflow用户

发布于 2014-02-02 17:02:35

我想在@Daniel的回答中添加更多的观点。

  1. 在使用ddlRoleList.Items.FindByText("Admin").ToString()时,可能会出现NULL异常。如果ddlRoleList.Items.FindByText("Admin")没有找到它,它会返回"NULL".
  2. I没有看到ddlRoleList.Items.FindByValue(item.Value).ToString();的正确用法。在这里,您再次尝试按值查找并转换为字符串。因为您已经从Linq中找到了item。你需要做的是item.Text

如果你能更好地理解,我以适当的方式为你写了以下代码:

代码语言:javascript
运行
复制
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;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21508554

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档