似乎无法将 Linq 与 ASP.Net 导航菜单一起使用
我有以下代码:
// Iterate through the root menu items in the Items collection.
foreach (MenuItem item in NavigationMenu.Items)
{
if (item.NavigateUrl.ToLower() == ThisPage.ToLower())
{
item.Selected = true;
}
}
我想要的是:
var item = from i in NavigationMenu.Items
where i.NavigateUrl.ToLower() == ThisPage.ToLower()
select i;
然后我可以设置 item
的 Selected
值,但它在 上给我一个错误NavigationMenu.Items
。
错误 5 找不到查询模式的实现 源类型“System.Web.UI.WebControls.MenuItemCollection”。 '在哪里' 未找到。考虑显式指定范围的类型 变量“i”。
当我注释掉 where
子句时,出现以下错误:
错误 22 找不到查询模式的实现 源类型“System.Web.UI.WebControls.MenuItemCollection”。 '选择' 未找到。考虑显式指定范围的类型 变量“i”。
I have the following piece of code:
// Iterate through the root menu items in the Items collection.
foreach (MenuItem item in NavigationMenu.Items)
{
if (item.NavigateUrl.ToLower() == ThisPage.ToLower())
{
item.Selected = true;
}
}
What I'd like is:
var item = from i in NavigationMenu.Items
where i.NavigateUrl.ToLower() == ThisPage.ToLower()
select i;
Then I can set the Selected
value of item
, but it gives me an error on the NavigationMenu.Items
.
Error 5 Could not find an implementation of the query pattern for
source type 'System.Web.UI.WebControls.MenuItemCollection'. 'Where'
not found. Consider explicitly specifying the type of the range
variable 'i'.
When I comment out the where
clause, I get this error:
Error 22 Could not find an implementation of the query pattern for
source type 'System.Web.UI.WebControls.MenuItemCollection'. 'Select'
not found. Consider explicitly specifying the type of the range
variable 'i'.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我怀疑
NavigationMenu.Items
仅实现IEnumerable
,而不是IEnumerable
。要解决此问题,您可能需要调用Cast
,这可以通过在查询中显式指定元素类型来完成:但是,您的查询命名有误导性 - 它是一个序列的事物,而不是单个项目。
我还建议使用
StringComparison
比较字符串,而不是将它们转为大写。例如:然后我会考虑使用扩展方法:
I suspect
NavigationMenu.Items
only implementsIEnumerable
, notIEnumerable<T>
. To fix this, you probably want to callCast
, which can be done by explicitly specifying the element type in the query:However, your query is named misleadingly - it's a sequence of things, not a single item.
I'd also suggest using a
StringComparison
to compare the strings, rather than upper-casing them. For example:I'd then consider using extension methods instead: