4

ASP.NET MVC 3 Preview1からRazorViewEngineを試していますが、Any()拡張メソッドを使用しようとすると問題が発生します。

コントローラでプロパティを設定するために使用するコードは次のとおりです。

ViewModel.Comparisons = DB.Comparisons.Where(c => c.UserID == this.UserID).ToArray();

これが私が使おうとしているビューのコードですAny()

@if (!View.Comparisons.Any()) {
<tr>
    <td>You haven't not started any comparisons yet. @Html.Action("Start a new comparison?", "create", "compare")</td>
</tr>
}

次のような例外が発生します。

'System.Array' does not contain a definition for 'Any'

web.configSystem.Linqのセクションとビューの上部に行を追加することの両方に名前空間を追加しようとしましたが、どちらも違いはありませんでした。LINQ拡張メソッドにアクセスするには何をする必要がありますか?pages\namespaces@using System.Linq

更新:動的オブジェクトのプロパティであるという事実に関係しているようです。手動でにキャストすると機能しIList<T>ます。

4

2 に答える 2

8

残念ながら、動的として宣言されている値に対して拡張メソッドを呼び出すことはできません。この場合、ViewModelは動的な値を返すため、コンパイラーはタイプを認識しないため、拡張メソッドの呼び出しが見つかりません。

次のいずれかをお勧めします。

  1. 強く型付けされたビューを使用します。このようにして、サポートされると、VisualStudioで完全なIntellisenseを取得することもできます。

  2. 値を明示的にIListにキャストしてから、extensionメソッドを呼び出します。このようにして、コンパイラーは正しいマッピングを行うことができます。

于 2010-08-25T16:12:18.503 に答える
0

動的なViewプロパティのバグのようです。@ifステートメントを次のようなものに変更した場合

@if(!(new List<string>().Any())) { }

あなたはそれが機能するのを見るでしょう。

于 2010-08-21T21:08:44.737 に答える