Linq 动态组合排序(Lambda)
最近有个项目需要做一个排班的功能,需要对排班的数据按不同的规则进行排序;因为排序规则是动态变化的,所以不太适合放到数据库中(临时表)中处理;
所以考虑使用Linq的排序方式(按不同的条件判断条件组合排序方式)
常用的排序方式是
list.OrderBy(...).ThenBy(...);
最初在网上找资料,写得比较麻烦,都是按集合中对象的属性进行排序,需要另写一些处理方法或类
经测试,其实可以这样
List<UserInfo> users = GetUsers(); // 创建一个IQueryable 对象 var q = users.AsQueryable<UserInfo>(); // 先按年龄排序 q = q.OrderBy(user=> user.Age); // 按城市 // q = q.OrderBy(user=> user.Age); // 此时不会出现ThenBy方法的,所以需要改为 q = ((IOrderedQueryable<UserInfo>)q).ThenBy(o => o.City); List<UserInfo> order_users = q.ToList(); // 此时就得到了按年龄以及城市排好序的列表了