Linq排序方式与Lambda排序方式比较以及OrderBy、ThenBy的使用
2017-08-12 12:10
633 查看
沿用之前某一篇文章的实体类与EF操作类代码。数据库中增加几条数据
Linq 的排序方式,下面例子是根据RoleId 升序,Name降序
输出结果如下:
SQL Profiler如下:
同样的方式如果用Lambda排序,先猜想如下,
运行程序发现与linq方式的不一致,
SQL Profile如下:
发现连续调用OrderBy或者OrderByDescending之后,以最后一个为准排序,这时ThenBy就派上了用场。
ThenBy是使用OrderBy或者OrderByDescending之后,再次对结果进行二次排序
如果想数据库中多个列排序一致,可以先OrderBy(或者OrderByDescending)后ThenBy(或者ThenByDescending),也可以在OrderBy或者OrderByDescending直接指定多个属性,这样生成的SQL就是多个列的排序(排序一致asc/desc)
Linq 的排序方式,下面例子是根据RoleId 升序,Name降序
EFContext<Member> efMemberContext = new EFContext<Member>(); var memberSet = efMemberContext.Set<Member>().Include("Role"); var memberList = from m in memberSet orderby m.RoleId ascending, m.Name descending select m; foreach (Member item in memberList) { Console.WriteLine("{0},Role:{1}",item.Name,item.Role.Name); }
输出结果如下:
SQL Profiler如下:
同样的方式如果用Lambda排序,先猜想如下,
EFContext<Member> efMemberContext = new EFContext<Member>(); var memberSet = efMemberContext.Set<Member>().Include("Role"); var memberList = memberSet.OrderBy(m => m.RoleId).OrderByDescending(m => m.Name); foreach (Member item in memberList) { Console.WriteLine("{0},Role:{1}",item.Name,item.Role.Name); }
运行程序发现与linq方式的不一致,
SQL Profile如下:
发现连续调用OrderBy或者OrderByDescending之后,以最后一个为准排序,这时ThenBy就派上了用场。
ThenBy是使用OrderBy或者OrderByDescending之后,再次对结果进行二次排序
EFContext<Member> efMemberContext = new EFContext<Member>(); var memberSet = efMemberContext.Set<Member>().Include("Role"); var memberList = memberSet.OrderBy(m => m.RoleId).ThenByDescending(m => m.Name); foreach (Member item in memberList) { Console.WriteLine("{0},Role:{1}",item.Name,item.Role.Name); }
如果想数据库中多个列排序一致,可以先OrderBy(或者OrderByDescending)后ThenBy(或者ThenByDescending),也可以在OrderBy或者OrderByDescending直接指定多个属性,这样生成的SQL就是多个列的排序(排序一致asc/desc)
EFContext<Member> efMemberContext = new EFContext<Member>(); var memberSet = efMemberContext.Set<Member>().Include("Role"); var memberList = memberSet.OrderBy(m => new { m.RoleId, m.Name }); foreach (Member item in memberList) { Console.WriteLine("{0},Role:{1}",item.Name,item.Role.Name); }
相关文章推荐
- 使用字节流复制文件的四种方式以及效率比较
- LINQ 标准的查询操作符 排序 orderby、thenby、Take
- .Net4.0中对集合型对象排序(Linq中Orderby使用)
- LINQ 按多个字段排序(orderby、thenby、Take)
- LINQ 标准的查询操作符 排序 orderby、thenby、Take
- 隨機排序或選取n筆資料(使用SQL、LINQ與Lambda)
- 数组排序方法的性能比较(4):LINQ方式的Array排序
- LINQ 标准的查询操作符 排序 orderby、thenby、Take
- 数组排序方法的性能比较(4):LINQ方式的Array排序
- 几种排序方式以及它们之间的比较
- List使用linq的OrderBy方法排序,并按照两个字段排序的写法
- LINQ 按多个字段排序(orderby、thenby、Take)
- 在LINQ to SQL中使用Translate方法以及修改查询用SQL (转)
- ADO.NET Linq To SQl与Data Entity 的使用比较
- 不能比较或排序text、ntext和image数据类型,除非使用IS NULL 或 LIKE 运算符。
- 内联函数以及两种传值方式的比较
- ASP中存储过程调用的两种方式,以及不采用存储过程的方式比较
- Entity Framework -- Linq To Entity使用方式
- 数组、List、ArrayList的使用以及for、foreach效率比较
- 在LINQ to SQL中使用Translate方法以及修改查询用SQL