1. 程式人生 > 其它 >EFCore常規操作生成的SQL語句一覽

EFCore常規操作生成的SQL語句一覽

前言

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大家有時間可以自己試試,要有什麼我沒想但的常規操作大家也可以在評論區提一下。