使用foreach循环在视图内部使用OrderBy

时间:2014-05-07 19:44:32

标签: c# asp.net-mvc-4 razor linq-to-sql

我使用以下内容按字母顺序显示所有国家/地区。它工作正常。但我的问题是:以下循环是在每次迭代中对国家名称进行排序还是只进行一次排序然后进行常规迭代?

<select id="dropDownID" name="NameID">
    <option value="NameID">Select Country...</option>
    @foreach (var item in Model.OrderBy(item => item.CountryName))
    {
        <option value="@item.NameID">@item.CountryName</option>
    }
</select>

为什么我在View中排序而不是在Controller 中排序 我从使用LinqToSQL for Model的人那里继承了这个项目。国家表位于O/R Designer,不提供排序表数据的选择,除非我认为我修改了此表的自动生成代码,但这意味着任何时候在SQL Server I中更新表需要通过删除并再次添加它来在O / R设计器中更新它,因此也可以手动更新自动生成的代码。另一种选择是在SQL服务器中创建一个SQL视图并在那里对数据进行排序 - 并在LinqToSQL模型中使用该视图。但我想避免为了订购目的而创建一个额外的对象。我认为更好的选择是完全避免LinqToSQL并在Controller中订购数据。

1 个答案:

答案 0 :(得分:1)

它只被调用一次,因为foreach循环首先调用GetEnumerator,然后才开始迭代它。检查一下 http://msdn.microsoft.com/en-us/library/system.collections.ienumerable.getenumerator.aspx 但通常您应该将有序模型传递给视图。