首页 新闻 会员 周边 捐助

c# List<>能按照List中对象的某个属性排序吗?如何实现呢?

0
悬赏园豆:5 [已解决问题] 解决于 2009-08-24 09:24

 

问题补充: 我的list<>对象中有多个属性,我希望按其中某一个属性进行排序。另外,若我实例化一个对象,如: List<Role> userrole = new List<Role>(); 当我写userrole. 之后会有OrderBy 扩展方法,也有Sort方法。偶感觉这两种应该都可以实现排序,但是不知道具体该怎么用,望高手能帮帮忙,不甚感激!!!
木子muzi的主页 木子muzi | 菜鸟二级 | 园豆:210
提问于:2009-08-21 10:22
< >
分享
最佳答案
1

有关Sort()的使用方法可以参考此文:http://www.cnblogs.com/azure/archive/2009/08/01/ASP_NET_LIST_SORT_FIND_DELEGATE.html

 

OrderBy是Linq提供的扩展方法,如果要实现排序只需:

var su=userrole.OrderBy(f=>f.Level);

(假定Role类有一个int类型属性Level,用以表示等级)

su变量里存储的就是一个经过排序的列表,其类型为IOrderedEnumerable<Role>,如果还希望获得List<Role>类型,则改为:

var su=userrole.OrderBy(f=>f.Level).ToList();

 

OrderBy(f=>f.Level)这里可以放置任意简单类型的返回值,比如OrderBy(f=>f.Level%3)或OrderBy(f=>Math.Abs(f.Level)),该方法会自动根据返回值由小到大排列;当然也可以返回字符串,那就会按字母顺序排列,比如OrderBy(f=>f.Name)。

 

还有个OrderByDescending()方法用于从大到小排列,使用方法相同。

收获园豆:5
斯克迪亚 | 老鸟四级 |园豆:4124 | 2009-08-22 03:25
呵呵,问题解决了,太谢谢你了!^_^
木子muzi | 园豆:210 (菜鸟二级) | 2009-08-24 09:26
其他回答(3)
0
Code
//这是个比较器
public class NameComparer:Icomparer<Student>
{
//实现姓名升序
public int Compare(Student x,Student y)
{
return(x.Name.CompareTo(y.Name));
}
}

//窗体中的排序按钮的点击事件
//省略了……
{
//之前我构造了一个Student的泛型叫students
students.Sort(new NameComparer());
//现在我泛型中的顺序已经按姓名升序好了。
}

引用自:http://topic.csdn.net/u/20080608/14/05b38a94-3d4e-4836-8525-0e4fbc393340.html

Kinglee | 园豆:3158 (老鸟四级) | 2009-08-21 10:28
能解释一下实现这个排序大概有哪几个步骤吗?我也看过你给的那个网站上的例子,但不是特别清楚,麻烦了!!!谢谢
支持(0) 反对(0) 木子muzi | 园豆:210 (菜鸟二级) | 2009-08-21 16:29
0

你如果使用Linq的话很容易,OrderBy 扩展方法

MicroCoder | 园豆:554 (小虾三级) | 2009-08-21 10:37
如: List<Role> userrole = new List<Role>(); 当我写userrole. 之后会有OrderBy <>扩展方法,但我还是不知道具体怎么用,望高手赐教!谢谢了
支持(0) 反对(0) 木子muzi | 园豆:210 (菜鸟二级) | 2009-08-21 17:02
0

小弟拜谢了!!!

枫落无情 | 园豆:205 (菜鸟二级) | 2011-08-03 14:02
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册