NancyFx超级简单视图引擎 - 取代Linq Enumerables

时间:2014-11-12 20:19:42

标签: c# linq nancy

我发现如果你在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没有枚举传入它的集合。

这种行为是否有意?或者我错过了什么?

1 个答案:

答案 0 :(得分:0)

我不太了解SSVE或Nancy,但我确实知道,当你只在MVC页面上执行查询时,LINQ和实体框架有时不喜欢(这是你的第一个方法正在做的事情,因为{ {1}}使用延迟执行)。当您的查询在后端完全执行时(如使用SelectMany()时使用立即执行),它往往会更好,因为这些项已经加载到内存中

如果这是正在发生的事情,至少你会很高兴知道它在其他地方也是如此。