ASP.NET MVC 2/.NET 4/Razor - 无法在ViewModel成员上使用Any()扩展方法

Dan*_*fer 4 linq extension-methods .net-4.0 razor asp.net-mvc-3

我正在尝试使用ASP.NET MVC 3 Preview 1中的Razor ViewEngine,我遇到了尝试使用Any()扩展方法的问题.

这是我用来在控​​制器中设置属性的代码:

ViewModel.Comparisons = DB.Comparisons.Where(c => c.UserID == this.UserID).ToArray();
Run Code Online (Sandbox Code Playgroud)

这是我尝试使用的View中的代码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>
}
Run Code Online (Sandbox Code Playgroud)

我得到一个例外,说:

'System.Array' does not contain a definition for 'Any'
Run Code Online (Sandbox Code Playgroud)

我已经尝试将System.Linq命名空间添加到pages\namespacesweb.config 的部分,并@using System.Linq在视图的顶部添加一行,这两者都没有区别.要访问LINQ扩展方法,我需要做什么?

更新:它看起来与它是动态对象的属性这一事实有关 - 如果我手动将它转换为它就可以工作IList<T>.

Eil*_*lon 8

遗憾的是,您无法对声明为动态的值调用扩展方法.在这种情况下,ViewModel返回动态值,因此编译器不知道类型,因此无法找到对扩展方法的调用.

我推荐以下之一:

  1. 使用强类型视图.这样,一旦支持,您将在Visual Studio中获得完整的Intellisense.

  2. 将值显式转换为IList,然后调用扩展方法.这样编译器就可以进行正确的映射.