前言
EFCo的性能先不说,便捷性绝对是.NetCo平台下的ORM中最好用的,主要血统还百分百纯正。
EFCo说到底还是对数据库进行操作,无论你是写Lamda还是Linq最后总归都是要生成SQL语句。
今天这篇文章就是要列举一下我们开发中的一些常规写法在数据库中生成的SQL语句。
测试数据库:Mysql
NuGet包:Pomelo.EntityFrameworkCo.MySql
实体对象:
DemoContextcontext=newDemoContext();DbSetUserusers=context.User;DbSetSchoolschools=context.School;
查询
ToList
users.ToList();
Whe
users.Whe(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
从指定数量开始忽略。
这里出现了一个奇怪的数字:,这是Mysql一张表理论上能存储的最大行数。
users.Skip(2).ToList();
SkipAndTake
我们通常的分页操作就是根据这两个方法实现的。
users.Skip(1).Take(2).ToList();
GroupBy
users.GroupBy(u=u.SchoolId).Select(u=new{count=u.Count(),item=u.FirstOrDefault()}).ToList();
Join(InnerJoin)
users.Join(schools,u=u.SchoolId,t=t.Id,(u,t)=newStudent{Name=u.Name,School=t.Name}).ToList();
GroupJoin(LeftJoin)
users.GroupJoin(schools,u=u.SchoolId,t=t.Id,(u,t)=new{user=u,school=t}).SelectMany(x=x.school.DefaultIfEmpty(),(u,t)=newStudent{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==));
RemoveRange
users.RemoveRange(users.Whe(c=c.Age));
搞定,这就是EFCo一些常规操作生成的Mysql语句了,SqlServer大家有时间可以自己试试