我似乎不能在ASP中使用Linq.导航菜单

本文关键字:Linq 导航 菜单 ASP 不能 | 更新日期: 2023-09-27 18:04:40

我有以下一段代码:

        // 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;

然后我可以设置itemSelected值,但是它在NavigationMenu.Items上给了我一个错误。

错误5找不到查询模式的实现源类型'System.Web.UI.WebControls.MenuItemCollection'。"在那里"没有找到。考虑显式指定范围的类型变量的"我"。

当我注释掉where子句时,我得到这个错误:

错误22无法找到查询模式的实现源类型'System.Web.UI.WebControls.MenuItemCollection'。"选择"没有找到。考虑显式指定范围的类型变量的"我"。

我似乎不能在ASP中使用Linq.导航菜单

我怀疑NavigationMenu.Items只实现了IEnumerable,而不是IEnumerable<T>。要解决这个问题,可能需要调用Cast,这可以通过在查询中显式指定元素类型来实现:

var item = from MenuItem i in NavigationMenu.Items
           where i.NavigateUrl.ToLower() == ThisPage.ToLower()
           select i;

然而,你的查询被误导命名-它是事物的序列,而不是单个项目。

我还建议使用StringComparison来比较字符串,而不是将它们大写。例如:

var items = from MenuItem i in NavigationMenu.Items
            where i.NavigateUrl.Equals(ThisPage, 
                                 StringComparison.CurrentCultureIgnoreCase)
            select i;

我会考虑使用扩展方法:

var items = NavigationMenu.Items.Cast<MenuItem>()
            .Where(item => item.NavigateUrl.Equals(ThisPage, 
                                 StringComparison.CurrentCultureIgnoreCase));