4

我正在尝试使用 ASP.NET MVC 3 Preview 1 中的 Razor ViewEngine,但在尝试使用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'

我尝试将System.Linq命名空间添加到 web.config 的两个pages\namespaces部分,并@using System.Linq在视图顶部添加一行,但两者都没有任何区别。我需要做什么才能访问 LINQ 扩展方法?

更新:看起来它与它是动态对象的属性有关 - 如果我手动将它转换为IList<T>.

4

2 回答 2

8

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

我推荐以下之一:

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

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

于 2010-08-25T16:12:18.503 回答
0

这似乎是动态 View 属性的错误。如果您将您的@if陈述更改为类似

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

你会看到它有效。

于 2010-08-21T21:08:44.737 回答