[英]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;
然后我可以設置item
的Selected
值,但它在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.