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();
}
看起来您正在视图中这样做,这违反了关注点分离的原则。但这就是你要做的。
@
{
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
-
layers是一个List, Model.layers.Select将返回一个
IEnumerable.
-
如果您只想返回
KONT == ‘EUROPE'
的层,您应该使用如下layers = @Model.layers.Where(x => x.KNOT == "EUROPE").ToList();