[英]NancyFx Super Simple View Engine - Substituting Linq Enumerables
我发现,如果您在类型为IEnumerable<T>
SSVE中对模型公开一个公共属性,并从该属性返回Linq枚举,则SSVE似乎认为该集合中没有任何值(检查@If.HasValues
,因此@Model.Values
是可枚举的)。
例如,我的C#属性是:
public IEnumerable<string> Warnings
{
get
{
return WarningGenerators.SelectMany(w => w.GetWarnings());
}
}
在这种情况下,以下html根本不会在生成的页面中显示(DOM中不存在):
@If.HasWarnings
<div class="row">
<div class="col-lg-12">
@Partial['WarningsWidget.sshtml', Model.Warnings]
</div>
</div>
@EndIf
但是,如果我将C#更改为此(不进行其他更改),则会显示html:
public IEnumerable<string> Warnings
{
get
{
return WarningGenerators.SelectMany(w => w.GetWarnings()).ToList();
}
}
显然,对ToList()
的调用正在枚举枚举,然后SSVE会提取这些条目。 我很惊讶SSVE并未枚举传递给它的集合。
这是故意行为吗? 还是我错过了什么?
我不太了解SSVE或Nancy,但我确实知道有时LINQ和Entity Framework不喜欢只在MVC页面上执行查询(这是SelectMany()
采用的第一种方法SelectMany()
推迟执行 )。 当您的查询完全在后端执行时(例如,使用.ToList()
时采用立即执行 ),它往往会好很多,因为这些项已经被加载到内存中了。
如果这是怎么回事,至少您可以放心地知道它在其他地方也是如此。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.