为什么我不能让LINQ在我的.cshtml文件中工作?

时间:2017-08-18 20:00:42

标签: c# asp.net-mvc linq asp.net-mvc-4 razor

我在VS 2017中工作,面向.NET Framework 4.6.2,我在一些不同的项目中遇到过这种情况。我相信这些项目最初是在VS 2012中创建的,因为它的价值。

我可以在任何.cs文件中使用Linq扩展和查询语法,但是如果我在.cshtml razor文件中尝试这样的行:

@{
    var activeCategories =  Model.Categories.Where(x => x.Articles.Count > 0).Count();
 }

<p>Active Categories: @activeCategories</p>

我收到这样的错误:

List<Category> does not contain a definition for 'Where', and the closest Extension method 
accepting a first argument of type List<Category> could not be found (are you missing a 
using directive or an assembly reference?)`

我已尝试将using System.Linq;添加到.cshtml文件的顶部,但它显示无法找到的错误。

我已更新Views文件夹下的Web.config以包含System.Linq,我已检查并且项目引用了System.Core,我已清除{{1}中的项目1}}。

关于是否在视图中使用LINQ的所有哲学都不应该发生,对吧?当我使用这些较旧的项目创建一个新的ASP.NET MVC项目时,这不是问题。

我也假设这与我的本地环境有关,因为其他开发人员似乎没有在他们的机器上出现这个问题。

为什么会发生这种情况,我该如何解决?

2 个答案:

答案 0 :(得分:4)

需要在主 Web.config 文件中添加 System.Core 引用。

<compilation>
  <assemblies>
    <add assembly="System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
  </assemblies>
</compilation>

答案 1 :(得分:1)

我也遇到同样的问题,我尝试将这些添加到webconfig中,然后重新构建,再次打开cshtml,它对我有用!!

<compilation debug="true" targetFramework="4.5">
  <assemblies>
    <add assembly="System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
    <add assembly="System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
    <add assembly="Microsoft.CSharp, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
    <add assembly="System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
    <add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <add assembly="System.Web.Helpers, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <add assembly="System.Web.WebPages, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <add assembly="System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
  </assemblies>
</compilation>

enter image description here