我有一个工作密码:
@{
var ekgList = AsList(App.Data["Ekgs"]);
foreach(var ekg in ekgList) {
<div>
@foreach (var entitiesFromSinusDataType in ekg.Sinus) {
if(entitiesFromSinusDataType.EntityId == Content.EntityId) {
<a>@ekg.ShortName</a>
}
}
</div>
}
}我能理解的是:
data)
相同)。
应该有一种简单的方法来删除第二个循环和"if",方法是在第一个循环中放置where子句。我正在一步一步地尝试,但一旦我尝试这个:
@{
var ekgList = AsList(App.Data["Ekgs"]);
foreach(var ekg in ekgList) {
<div>
@foreach (var entitiesFromSinusDataType in ekg.Sinus.Where(i => i.EntityId == Content.EntityId)) {
<a>@ekg.ShortName</a>
}
</div>
}
}我知道这个错误:
CS1977: Cannot use a lambda expression as an argument to a dynamically dispatched operation without first casting it to a delegate or expression tree type这似乎是由于使用动态类型造成的。
有什么方法可以将列表转换成非动态版本吗?
发布于 2020-02-24 17:29:32
尝试将ekg.Sinus转换为((IEnumerable<dynamic>)ekg.Sinus):
((IEnumerable<dynamic>)ekg.Sinus).Where(i => i.EntityId == Content.EntityId)希望这能帮到你。
发布于 2020-02-25 06:44:54
这是因为编译器无法猜测ekg.Sinus是一个列表,因此LINQ扩展不会被自动解析。请注意,从2sxc 10.25开始,您也可以这样做:
AsList(ekg.Sinus).Where(...)或者,如果不起作用(有时编译器无法猜出一切),则执行:
AsList(ekg.Sinus as object).Where(...)我还建议您查看LINQ教程https://2sxc.org/dnn-tutorials/en/razor/linq/home。
https://stackoverflow.com/questions/60380294
复制相似问题