联表更新
更新联表中某个表的数据
1. 接口
2. 类
3. 相关方法
3.1 ToUpdate扩展方法
MultiTableUpdate ToUpdate(this IMultiView view);
CommentAliasTable c = new("c");
PostAliasTable p = new("p");
var joinOn = JoinOnSqlQuery.Create(c, p)
.On(c.PostId.Equal(p.Id));
var query = joinOn.Root
.Where(p.Author.EqualValue("张三"))
.Where(c.Pick.EqualValue(false));
var update = query.ToUpdate()
.Set(c.Pick.AssignValue(true));
// UPDATE c SET c.[Pick]=1 FROM [Comments] AS c INNER JOIN [Posts] AS p ON c.[PostId]=p.[Id] WHERE p.[Author]='张三' AND c.[Pick]=0
3.3 Set扩展方法
此扩展方法联表更新专用
TMultiUpdate Set<TMultiUpdate>(this TMultiUpdate update, Func<IAliasTable, IAssignOperation> operation)
where TMultiUpdate : MultiTableUpdate;
var joinOn = JoinOnSqlQuery.Create("Comments", "Posts")
.On((t1, t2) => t1.Field("PostId").Equal(t2.Field("Id")));
var query = joinOn.Root
.Where("Posts", t2 => t2.Field("Author").EqualValue("张三"))
.Where("Comments", t1 => t1.Field("Pick").EqualValue(false));
var update = query.ToUpdate()
.Update("Comments")
.Set(t1 => t1.Field("Pick").AssignValue(true));
// UPDATE t1 SET t1.[Pick]=1 FROM [Comments] AS t1 INNER JOIN [Posts] AS t2 ON t1.[PostId]=t2.[Id] WHERE t2.[Author]='张三' AND t1.[Pick]=0
3.3 Update扩展方法
- 可选方法,用于指定更新数据的表
- 默认更新第一张表的数据
- 如果更新第一张表的数据可以不指定
TMultiUpdate Update<TMultiUpdate>(this TMultiUpdate update, IAliasTable table)
where TMultiUpdate : MultiTableUpdate;
CommentAliasTable c = new("c");
PostAliasTable p = new("p");
var joinOn = JoinOnSqlQuery.Create(c, p)
.On(c.PostId.Equal(p.Id));
var query = joinOn.Root
.Where(p.Author.EqualValue("张三"))
.Where(c.Pick.EqualValue(false));
var update = query.ToUpdate()
.Update(c)
.Set(c.Pick.AssignValue(true));
// UPDATE c SET c.[Pick]=1 FROM [Comments] AS c INNER JOIN [Posts] AS p ON c.[PostId]=p.[Id] WHERE p.[Author]='张三' AND c.[Pick]=0
3.4 Update重载扩展方法
- 可选方法,用于指定更新数据的表
- 默认更新第一张表的数据
- 如果更新第一张表的数据可以不指定
MultiTableUpdate Update<TMultiUpdate>(this TMultiUpdate update, string tableName)
where TMultiUpdate : MultiTableUpdate;
var joinOn = JoinOnSqlQuery.Create("Comments", "Posts");
var (t1, t2) = (joinOn.Left, joinOn.Source);
joinOn.On(t1.Field("PostId").Equal(t2.Field("Id")));
var query = joinOn.Root
.Where(t2.Field("Author").EqualValue("张三"))
.Where(t1.Field("Pick").EqualValue(false));
var update = query.ToUpdate()
.Update("Comments")
.Set(t1.Field("Pick").AssignValue(true));
// UPDATE t1 SET t1.[Pick]=1 FROM [Comments] AS t1 INNER JOIN [Posts] AS t2 ON t1.[PostId]=t2.[Id] WHERE t2.[Author]='张三' AND t1.[Pick]=0