9

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

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

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

@Model.layers 是一个列表

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

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

3 回答 3

14

在您看来,您似乎正在这样做,这违反了关注点分离的原则。但这就是你要做的事情。

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

@foreach(var layer in layers)
{
  .....
}

更好的方法

但是,您应该做的是在模型“GetLayersForLocation”上创建一个方法,然后您的代码将如下所示:

在您的模型类中

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

在您查看代码中

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

这样做更好的原因是您现在可以对代码进行单元测试,因为它只是您视图的一部分,但现在您可以运行自动化测试以确保获得正确的层正在工作。

于 2013-06-13T10:09:05.820 回答
6

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

 @model SomeModel
于 2014-08-01T17:36:24.207 回答
1
  1. 层是一个列表,Model.layers.Select 将返回一个IEnumerable.

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

    layers = @Model.layers.Where(x => x.KNOT == "EUROPE").ToList();
    
于 2013-06-13T09:33:02.457 回答