Linq排序方式与Lambda排序方式比较以及OrderBy、ThenBy的使用
2024-08-30 01:08:28
沿用之前某一篇文章的实体类与EF操作类代码。数据库中增加几条数据
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);
}
最新文章
- 使用epel源安装软件
- [转]C#编程总结(三)线程同步
- Get IP Address in Android 4.0+
- GridView、DataGrid、DataList、Repeater、ListView、DetailsView、FormView
- ionic cordova plugin for ios
- opengl (1) 基本API的熟悉
- Android常用组件【转】
- 计算两点距离 ios
- sql中Statement与PreparedStatement的区别
- Video Target Tracking Based on Online Learning—TLD多目标跟踪算法
- 设计模式之 观察者模式详解(包含观察者模式JDK的漏洞以及事件驱动模型)
- idea和androidstudio的首次git配置一些问题
- python---购物车
- 十进制转为x进制的递归代码
- python第四十六课——函数重写
- 简单记录下3PC
- 微软职位内部推荐-Senior PM
- 二、源代码=>;程序集及程序集概念介绍
- L2-022 重排链表(链表)
- vue总结 06组件
热门文章
- svn 服务器搭建 ,采用http的方式加密用户。
- 问题记录 | VScode中使用IntelliJ的快捷键
- IntelliJ IDEA使用心得之问题篇;
- Linux-(touch,cat,nl,more|less,head|tail)
- Docker运行操作系统环境(BusyBox&;Alpine&;Debian/Ubuntu&;CentOS/Fedora)
- 8分钟丨教你玩转 API
- 解决启动mongod 时,出现addr already in use错误
- mongodb int型id 自增
- javascript正则表达式获取控制
- 入门redis