ASP.NET MVC:不能将lambda表达式用作动态调度操作的参数

我有一个ASP.NET MVC4应用程序。 我的视图从我的控制器获取一个List。 我想用lambda表达式选择这些列表,但是我收到以下错误:

如果不首先将lambda表达式转换为委托或表达式树类型,则不能将lambda表达式用作动态分派的操作的参数

List layers = new List(); layers = @Model.layers.Select(x => x.KONT == "EUROPE"); 

@ Model.layers是一个List

我现在试过:但是同样的错误:

 @{ List layers = Model.layers.Where(x => x.KNOT == "EUROPE").ToList(); } 

看起来你在你的观点中这样做,这违反了关注点分离的原则。 但这就是你要做的。

 @ { var layers = Model.layers.Where(x => x.KONT == "EUROPE").ToList(); } @foreach(var layer in layers) { ..... } 

更好的方式

你应该做的是在你的模型“GetLayersForLocation”上创建一个方法然后你的代码看起来像这样:

在您的模型类中

 public IEnumerable GetLayersForLocation(string location) { return this.layers.Where(x => x.Knot == location); } 

在您的视图代码中

 @foreach(var layer in Model.GetLayersForLocation("EUROPE")) { ..... } 

这样做更好的原因是你现在可以对代码进行unit testing,然后才能进行unit testing,因为它只是你视图的一部分,但是现在你可以运行自动化测试来确保获得正确的图层。

对于其他人,我注意到当我没有强类型视图时,我在Views中出现此错误, 例如在“@model type”之前意外 地输入 了一个字符 (因此模型类型声明现在为no更长的时间。)

  @model SomeModel 
  1. layers是一个List,Model.layers.Select将返回一个IEnumerable.

  2. 如果您只想返回KONT == 'EUROPE'图层,则应使用以下内容

     layers = @Model.layers.Where(x => x.KNOT == "EUROPE").ToList();