前言

EFCore的性能先不说,便捷性绝对是.Net Core平台下的ORM中最好用的,主要血统还百分百纯正。

EFCore说到底还是对数据库进行操作,无论你是写Lamda还是Linq最后总归都是要生成SQL语句。

今天这篇文章就是要列举一下我们开发中的一些常规写法在数据库中生成的SQL语句。

测试数据库:Mysql
NuGet包:Pomelo.EntityFrameworkCore.MySql
实体对象:

DemoContext context = new DemoContext();
DbSet<User> users = context.User;
DbSet<School> schools = context.School;

查询

ToList
users.ToList();

Where
users.Where(u => u.SchoolId == 1).ToList();

OrderBy
users.OrderBy(u => u.Age).ToList();

ThenBy
users.OrderBy(u => u.Age).ThenBy(u => u.SchoolId).ToList();

Take

返回执行数量的元素。

users.Take(2).ToList();

Skip

从指定数量开始忽略。

这里出现了一个奇怪的数字:18446744073709551610,这是Mysql一张表理论上能存储的最大行数。

users.Skip(2).ToList();

Skip And Take

我们通常的分页操作就是根据这两个方法实现的。

users.Skip(1).Take(2).ToList();

GroupBy
users.GroupBy(u => u.SchoolId)
.Select(u => new { count = u.Count(), item = u.FirstOrDefault() })
.ToList();

Join(Inner Join)
users.Join(schools, u => u.SchoolId, t => t.Id, (u, t) =>
new Student
{
Name = u.Name,
School = t.Name
}).ToList();

GroupJoin(Left Join)
users.GroupJoin(schools, u => u.SchoolId, t => t.Id, (u, t) => new { user = u, school = t })
.SelectMany(x => x.school.DefaultIfEmpty(), (u, t) =>
new Student
{
Name = u.user.Name,
School = t.Name
}).ToList();

增删改

Add
users.Add(user);

AddRange
users.AddRange(userList);

Update
users.Update(user);

UpdateRange
users.UpdateRange(userList);

Remove
users.Remove(users.FirstOrDefault(c => c.Id == 100));

RemoveRange
users.RemoveRange(users.Where(c => c.Age > 100));


搞定,这就是EFCore一些常规操作生成的Mysql语句了,SqlServer大家有时间可以自己试试,要有什么我没想但的常规操作大家也可以在评论区提一下。

最新文章

  1. canvas arcTo()用法详解
  2. 安卓开发_浅谈Android动画(二)
  3. android 进程什么时候被销毁
  4. nyoj 62 笨小熊
  5. python通过163邮箱发送邮件
  6. 使用ffmpeg向crtmpserver发布rtsp流
  7. Discuz!NT中的Redis架构设计
  8. mysql 断电 启动不了 start: Job failed to start
  9. wchar_t与char、wstring与string的相互转换
  10. 通过layout实现可拖拽自动排序的UICollectionView
  11. c# 课堂总结7--函数
  12. 多个haproxy 之间跳转
  13. POJ 2505 A multiplication game(找规律博弈/贪心)
  14. Linux(三)——Unix&amp;Linux 的基础命令
  15. 一次多个数据库tnsping及登录单点登录需求
  16. 远程过程调用发展历程 WebAPI GRPC Hprose
  17. 05python下
  18. ES6最新语法
  19. 【TCP/IP详解 卷一:协议】第9章 IP选路
  20. 图说使用socket建立TCP连接

热门文章

  1. scanf()函数的原理
  2. 设计模式之简单工厂SimpleFactory的实现(配置文件)
  3. java中什么是内部类?它有什么用?如何使用?
  4. EMS批量为用户分配邮箱
  5. springcloud报错:org.springframework.beans.factory.BeanCreationException: Error creating bean with name &#39;armeriaServer&#39; defined in class path resource
  6. Python入门-安装Python开发环境
  7. 导入,导出excel
  8. Django中数据传输编码格式、ajax发送json数据、ajax发送文件、django序列化组件、ajax结合sweetalert做二次弹窗、批量增加数据
  9. 如何利用PowerShell完成的Windows服务器系统安全加固实践和基线检测
  10. 编译实战 | 手摸手教你在Windows环境下运行Redis6.x