ASP.不能使用lambda表达式作为动态分派操作的参数

本文关键字:分派 动态 操作 参数 不能 lambda 表达式 ASP | 更新日期: 2023-09-27 18:18:24

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

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

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

@ model。图层是一个列表

现在我试了,但同样的错误:

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

ASP.不能使用lambda表达式作为动态分派操作的参数

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

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

更好的方法

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

In Your Model Class

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

In Your View Code

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

这样做更好的原因是你现在可以单元测试你的代码,在你不能之前,因为它只是你视图的一部分,但现在你可以运行自动化测试,以确保获得适当的层是工作的。

对于其他人,我注意到当我没有强类型视图时,我在视图中得到此错误,例如,如果在"@model type"行之前意外键入单个字符(因此模型类型声明现在不再被制作)

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

  2. 如果您只想返回KONT == ‘EUROPE'的层,您应该使用如下

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