我发现如果你在SSVE中的模型IEnumerable<T>
上暴露一个公共属性并从该属性返回一个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没有枚举传入它的集合。
这种行为是否有意?或者我错过了什么?
答案 0 :(得分:0)
我不太了解SSVE或Nancy,但我确实知道,当你只在MVC页面上执行查询时,LINQ和实体框架有时不喜欢(这是你的第一个方法正在做的事情,因为{ {1}}使用延迟执行)。当您的查询在后端完全执行时(如使用SelectMany()
时使用立即执行),它往往会更好,因为这些项已经加载到内存中
如果这是正在发生的事情,至少你会很高兴知道它在其他地方也是如此。