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

标签 linq .net-4.0 extension-methods 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();

这是我尝试使用的 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>
}

我得到一个异常(exception),说:
'System.Array' does not contain a definition for 'Any'

我试过添加 System.Linq命名空间到 pages\namespaces web.config 部分,并添加 @using System.Linq View 顶部的线,两者都没有区别。我需要做什么才能访问 LINQ 扩展方法?

更新:看起来这与它是动态对象的属性这一事实有关 - 如果我手动将其强制转换为 IList<T>,它会起作用。 .

最佳答案

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

我推荐以下之一:

  • 使用强类型 View 。这样,一旦支持,您还将在 Visual Studio 中获得完整的 Intellisense。
  • 将值显式转换为 IList,然后调用扩展方法。这样编译器就可以进行正确的映射。
  • 关于linq - ASP.NET MVC 2/.NET 4/Razor - 不能在 ViewModel 成员上使用 Any() 扩展方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3535016/

    相关文章:

    Rust 等同于具有相同泛型参数约束的 Swift 扩展方法?

    linq - 将字符串转换为 linq 查询

    c# - 使用 linq 查找锯齿状数组中最左边和最右边的点?

    c# - 这两种说法是同一回事吗?

    c# - 为什么SubscribeOn在这里不能作为扩展方法而是直接调用?

    c# - 存储库方法与扩展 IQueryable

    c# - 使用 LINQ 比较两个字段

    .net - 'useLegacyV2RuntimeActivationPolicy' 在 .NET 4 配置中起什么作用?

    .net-4.0 - 针对 .NET 4.0 框架编译和调试的 NServiceBus FullDuplex 示例引发异常

    sql-server - SQL Server 异常 : TCP Provider, 错误:0 - 指定的网络名称不再可用