C#中LINQ对查询结果的排序

查询结果排序

var res = from m in masterList
    where m.Level > 8 && m.Age > 50   
    orderby m.Level   //默认按照从小到大进行排序  
    select m.Name;
var res = from m in masterList
    where m.Level > 8 && m.Age > 50   
    orderby m.Level descending  //按照从大到小的顺序进行排序  
    select m.Name;

多字段排序
如果第一个字段的属性相同,则按照第二个属性来进行排序。
如果所有属性都相同,就按照默认的顺序进行排序。

var res = from m in masterList
    where m.Level > 8 && m.Age > 50   
    orderby m.Level, m.ID   //即当Level相同时,就按照ID进行排序
    select m.Name;

扩展方法写法

//OrderBy方法中,传递的参数也是一个委托,利用扩展方法,只需要将需要排序的属性返回即可
var res = masterList.Where(m=>m.Level > 8 && m.Age > 50).OrderBy(m=>m.Level);

利用扩展方法按照多个属性进行排序时,不可以直接调用多个OrderBy方法。
因为这样其实每一次OrderBy都是对当前的集合进行重新排列的。也就是说,这种排序没有继承性。
应该使用ThenBy()方法:

//ThenBy():
//在OrderBy顺序满足的情况下,再按照ThenBy方法里的委托来进行排序。
var res = masterList.Where(m=>m.Level > 8 && m.Age > 50).OrderBy(m=>m.Level).ThenBy(m=>m.ID);

猜你喜欢

转载自blog.csdn.net/lym940928/article/details/80298516