前言 EFCore 的性能先不说,便捷性绝对是 .Net Core 平台下的 ORM 中最好用的,主要血统还百分百纯正。 EFCore 说到底还是对数据库进行操作,无论你是写 Lamda 还是 Linq 最后总归都是要生成
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
大家有时间可以自己试试,要有什么我没想但的常规操作大家也可以在评论区提一下。