4

次のコードがあります。

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

次に、 のSelected値を設定できますがitem、 でエラーが発生しますNavigationMenu.Items

エラー 5 ソース タイプ 'System.Web.UI.WebControls.MenuItemCollection' のクエリ パターンの実装が見つかりませんでした。「場所」が見つかりません。範囲変数 'i' の型を明示的に指定することを検討してください。

句をコメントアウトすると、次のwhereエラーが発生します。

エラー 22 ソース タイプ 'System.Web.UI.WebControls.MenuItemCollection' のクエリ パターンの実装が見つかりませんでした。「選択」が見つかりません。範囲変数 'i' の型を明示的に指定することを検討してください。

4

1 に答える 1

5

ではなく、NavigationMenu.Items実装するだけだと思います。これを修正するには、おそらく を呼び出す必要があります。これは、クエリで要素タイプを明示的に指定することで実行できます。IEnumerableIEnumerable<T>Cast

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

ただし、クエリの名前は誤解を招くように付けられています。これは一連のものであり、単一のアイテムではありません。

StringComparison文字列を大文字にするのではなく、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));
于 2011-08-05T09:28:08.087 に答える