簡體   English   中英

似乎無法使用Linq與ASP.Net導航菜單

[英]Can't seem to use Linq with ASP.Net Navigation menu

我有以下代碼:

        // 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”的查詢模式的實現。 '哪里'找不到。 考慮明確指定范圍變量'i'的類型。

當我注釋掉where子句時,我收到此錯誤:

錯誤22無法找到源類型“System.Web.UI.WebControls.MenuItemCollection”的查詢模式的實現。 找不到“選擇”。 考慮明確指定范圍變量'i'的類型。

我懷疑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));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM