C# 为什么可以';我不能让LINQ在我的.cshtml文件中工作吗?

C# 为什么可以';我不能让LINQ在我的.cshtml文件中工作吗?,c#,asp.net-mvc,linq,asp.net-mvc-4,razor,C#,Asp.net Mvc,Linq,Asp.net Mvc 4,Razor,我在VS2017工作,目标是.NET Framework 4.6.2,我在几个不同的项目中遇到过这个问题。我相信这些项目最初是在VS 2012中创建的,这是值得的 我能够在任何.cs文件中使用Linq扩展名和查询语法,没有任何问题,但是如果我在.cshtml文件中尝试这样一行: @{ var activeCategories = Model.Categories.Where(x => x.Articles.Count > 0).Count(); } <p>A

我在VS2017工作,目标是.NET Framework 4.6.2,我在几个不同的项目中遇到过这个问题。我相信这些项目最初是在VS 2012中创建的,这是值得的

我能够在任何.cs文件中使用Linq扩展名和查询语法,没有任何问题,但是如果我在.cshtml文件中尝试这样一行:

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

<p>Active Categories: @activeCategories</p>
@{
var activeCategories=Model.Categories.Where(x=>x.Articles.Count>0.Count();
}
活动类别:@activeCategories

我得到一个类似这样的错误:

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?)`
列表不包含“Where”的定义和最近的扩展方法
找不到接受列表类型的第一个参数(是否缺少
使用指令或程序集引用?)`
我已经尝试使用System.Linq添加
添加到.cshtml文件的顶部,但它显示了一个无法找到的错误

我已经更新了视图文件夹下的
Web.config
以包含
System.Linq
,我已经检查了,项目正在引用
System.Core
,并且我已经清除了
%LOCALAPPDATA%/Microsoft/VisualStudio/15.0\u ba2c3fe6/ComponentModelCache
中的项目

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

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


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

我也有同样的问题,我尝试在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>


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

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


可能您缺少使用System.Data.Linq的
@之类的内容。在cshtml文件的顶部,请确保已为引用的DLL选中了“复制到本地”选项,例如
System.Linq
,“System.Web.Mvc”…刚刚尝试使用System.Data.Linq
添加
,它有相同的错误,它只是不会显示。还要确保在
Views
文件夹中有
Web.config
文件,并且还引用了System.linq,如果要进行快速修复,请改为在控制器方法中执行Where子句,并将结果传递到ViewBag中,例如,因为它在.cs文件中工作