咨询区
Sasha:
我有两张表:movies
和 categories
,我想获取一个先按 categoryid 再按 Name 排序的list。
movie
表有三个列:ID,Name,CategoryID
。category
表有两个列:ID,Name
。
我设想的伪代码如下:
var movies = _db.Movies.OrderBy( m => { m.CategoryID, m.Name })
回答区
Scott Stafford:
不需要用 lambda 方式,可以用 查询词法
的形式,比如下面这样:
var movies = from row in _db.Movies orderby row.Category, row.Nameselect row;
当然你也可以控制排序的方向,默认是升序 (ascending),你也可以改为降序 (descending),比如:
var movies = from row in _db.Movies orderby row.Category descending, row.Nameselect row;
Alex:
其实实现的方式有很多:
使用扩展方法 ThenBy 排序
var movies = _db.Movies.OrderBy(c => c.Category).ThenBy(n => n.Name)
使用匿名类型排序
因为匿名类是被重写过 Equals 和 GetHashcode 的,所以可以用来排序。
var movies = _db.Movies.OrderBy( m => new { m.CategoryID, m.Name })
拼接列名
还有一种排序方法,那就是将多个列拼接在一起,然后对复合列进行排序,参考如下代码:
var movies = _db.Movies.OrderBy( m => (m.CategoryID.ToString() + m.Name))
点评区
没想到对list进行二次排序还有这么多方法,学习了,如果是 Linq 查询数据库的话,建议多看看最终生成的sql,看是否就是我们需要的。