SqlSugar 联表查询
Join 用法
示例:
1 | public IEnumerable<dynamic> GetAllUser() |
语法糖 1
优点:好理解,5 个表以内的联表非常爽,支持功能全
缺点:联表超过 5 个以上的表后 (x,b,c…) 会比较难看,语法糖 2 可以弥补
1 | var tmp = db.Queryable<Order>() |
语法糖 2
优点 1:这种适合联表比较多的比如5个以上的表 JOIN 写起来会比较爽
优点 2:因为是一个参数更容易封装成方法 例如 Queryable<T,T2>(expression)
缺点:不支持 LeftJoin(queryable)
这种嵌套
单表查询是基于 db.Queryable<T>
1 | db.Queryable<Users> |
联表查询是基于多个 T,例如 db.Queryable<T, T2,T3>
3 个 T 就是3表查询
1 | var tmp = db.Queryable<Order, OrderItem, Custom>((o, i, c) => new JoinQueryInfos( |
因为多个 T 的原因所以在 Where 、 Select 、OrderBy、GroupBy 操作上同单表查询稍有差别
常见错误:
数组超过界限 5 个 T 就是 4 个 JOIN , 8 个 T 就是 7 个 JOIN ,不要写多了或者写少了
语法糖 3
如果全部是 Inner Join 可以用这种方式直接联表
1 | var list = db.Queryable<Order, OrderItem, Custom>((o, i, c) => o.Id == i.OrderId&&c.Id == o.CustomId) |
Where 用法
注意:写在 .Select() 之前
1 | .Where(o=>o.id==1) //只用到 o 这样写就行 |
OrderBy 用法
注意:写在 .Select() 之前
1 | .OrderBy(o=>o.id) //只用到 o 这样写就行 |
GroupBy 用法
注意:写在 .Select() 之前
1 | .GroupBy(o=>o.id) //只用到 o 这样写就行 |
Select 用法
必写:联表查询必须加上 Select,不然会查询出重复列报错 , Select 一般写在 ToList 之前
只用到 o 表可以 o=>
用到 i 表 没用到 c 表 (o,i)=> (错误用法 : i=>)
用到 c 表 (o,i,c)=> (错误 1 : c=> 错误 2 : (i,c)=> 错误 3 : (o,c)=>)
1 | //新类 |
语法糖 1、2、3 的 Where、OrderBy、GroupBy、Select 用法都一样的,他们区别就在 JOIN 的方式不一样,其它都一样
Linq 查询
1 | public string GetAllUser() |