Question

I am using the following to dropdown displaying all countries in alphabetical order. It works fine. But my question is: Is the following loop ordering the country names in each iteration or it orders only once and then does a usual iteration?

<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>

Why I am sorting inside View and not in Controller I inherited this project from someone who used LinqToSQL for Model. The country table is in the O/R Designer that does not provide the choice for ordering the table data unless, I think, I modify the auto-generated code for this table but that would mean anytime the table is updated in SQL server I would need to update it in the O/R Designer by deleting and adding it again and hence update the auto-generated code manually as well. The other choice would be to create a SQL View in the SQL server and order the data there - and use that view in the LinqToSQL model. But I want to avoid creating an extra object for just ordering purposes. I think the better choice would be to avoid LinqToSQL altogether and order the data inside Controller.

Était-ce utile?

La solution

It is called only once since foreach loop first calls GetEnumerator and only then starts iterating over it. Check this http://msdn.microsoft.com/en-us/library/system.collections.ienumerable.getenumerator.aspx However normally you should pass ordered model to view.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top