ASP.NET MVC 4订购的项目集 [英] ASP.NET MVC 4 ordered set of items
问题描述
大家好.
最近我遇到了这样的问题.
在我的项目中,我有一个房间列表(简单的无序集合).
如何实现设置此房间在第二页中显示的顺序的功能?
有什么想法吗?
第一个想法是创建一个
Hi everyone.
Recently i have encountered with such issue.
In my project i have a list of rooms (simple unordered set).
How can i implement ability of setting order in which this rooms will appears in second page?
Any thoughts?
The firs idea is to create a
Queue<Rooms>
,并在其下执行适当的操作.
但我不确定这是否正确....
, and perform appropriate actions under it.
But i''m not sure if it''s a right way ....
推荐答案
订购队列:
To order a Queue:
var rooms = new Queue<Rooms>();
var orderByNumberAsc = rooms.OrderBy(r => r.Number);
var orderByNumberDesc = rooms.OrderByDescending(r => r.Number);
要基于字符串动态排序,您需要扩展:
To dynamically order this based on string you need an extension:
public static IQueryable<T> OrderBy<T>(this IQueryable<T> items, string propertyName)
{
var typeOfT = typeof(T);
var parameter = Expression.Parameter(typeOfT, "parameter");
var propertyType = typeOfT.GetProperty(propertyName).PropertyType;
var propertyAccess = Expression.PropertyOrField(parameter, propertyName);
var orderExpression = Expression.Lambda(propertyAccess, parameter);
var expression = Expression.Call(typeof(Queryable), "OrderBy", new[] { typeOfT, propertyType }, items.Expression, Expression.Quote(orderExpression));
return items.Provider.CreateQuery<T>(expression);
}
然后,您可以按字符串值排序:
Then you can order by a string value:
var rooms = new Queue<Rooms>().AsQueryable();
var orderByNumberAsc = rooms.OrderBy("Number");
您可以轻松地为OrderByDescending(string propertyName)
创建扩展名
还是使用switch语句的动态方法少一些:
And you could easy create an extension for OrderByDescending(string propertyName)
Or a little less dynamic approach using switch statement:
switch (orderByParam)
{
case "Number":
rooms = rooms.OrderBy(r => r.Number);
break;
case "Capacity":
rooms = rooms.OrderBy(r => r.Capacity);
break;
}
这篇关于ASP.NET MVC 4订购的项目集的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!