Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Can';似乎没有将Linq与ASP.Net导航菜单一起使用_C#_Linq_Navigationbar - Fatal编程技术网

C# Can';似乎没有将Linq与ASP.Net导航菜单一起使用

C# Can';似乎没有将Linq与ASP.Net导航菜单一起使用,c#,linq,navigationbar,C#,Linq,Navigationbar,我有以下代码: // Iterate through the root menu items in the Items collection. foreach (MenuItem item in NavigationMenu.Items) { if (item.NavigateUrl.ToLower() == ThisPage.ToLower()) { item.Sel

我有以下代码:

        // 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;
然后,我可以设置
项的
所选
值,但它在
导航菜单上给了我一个错误。Items

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

当我注释掉
where
子句时,我得到以下错误:

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


我怀疑
导航菜单。项
只实现
IEnumerable
,而不是
IEnumerable
。要解决此问题,您可能需要调用
Cast
,这可以通过在查询中显式指定元素类型来完成:

var item = from MenuItem i in NavigationMenu.Items
           where i.NavigateUrl.ToLower() == ThisPage.ToLower()
           select i;
然而,您的查询的名称有误导性——它是一系列的事情,而不是一个单独的项目

我还建议使用a来比较管柱,而不是上套管。例如:

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));
var items=NavigationMenu.items.Cast()
其中(item=>item.NavigateUrl.Equals)(此页,
StringComparison.CurrentCultureInogoreCase);

Ohh……这是个巧妙的把戏!我希望我能更早地了解
强制转换
。为了将来的参考,值得真正阅读错误消息-它给出了与我完全相同的建议:显式指定范围变量的类型。当我注释掉Linq语句的
where
部分时,就会出现该消息。当我取消注释
where
语句时,它给了我一个不同的错误。@Neil:那错误消息是什么?一般来说,在类似这样的问答网站上,如果不指定错误消息本身,就说“它给了我一个错误”从来都不是一个好主意。@Neil:这不是一个完全不同的错误消息-它仍然准确地告诉你需要做什么来修复它:)