mirror of
https://github.com/dotnetcore/FreeSql.git
synced 2026-02-03 23:10:54 +08:00
update
22
API.md
22
API.md
@@ -146,26 +146,26 @@ DbContext 自身 = 完整事务,BaseRepository 不一定有事务(可通过
|
||||
| 【条件】 |
|
||||
| Where | \<this\> | Lambda | 支持多表查询表达式,多次使用相当于AND |
|
||||
| WhereIf | \<this\> | bool, Lambda | 支持多表查询表达式 |
|
||||
| Where | \<this\> | string, parms | 原生sql语法条件,Where("id = ?id", new { id = 1 }) |
|
||||
| WhereIf | \<this\> | bool, string, parms | 原生sql语法条件,WhereIf(true, "id = ?id", new { id = 1 }) |
|
||||
| Where | \<this\> | string, parms | 原生sql语法条件,Where("id = @id", new { id = 1 }) |
|
||||
| WhereIf | \<this\> | bool, string, parms | 原生sql语法条件,WhereIf(true, "id = @id", new { id = 1 }) |
|
||||
| WhereCascade | \<this\> | Lambda | 实现多表查询时,向每个表中附加条件 |
|
||||
| 【分组】 |
|
||||
| GroupBy | \<this\> | Lambda | 按选择的列分组,GroupBy(a => a.Name) | GroupBy(a => new{a.Name,a.Time}) |
|
||||
| GroupBy | \<this\> | string, parms | 按原生sql语法分组,GroupBy("concat(name, ?cc)", new { cc = 1 }) |
|
||||
| Having | \<this\> | string, parms | 按原生sql语法聚合条件过滤,Having("count(name) = ?cc", new { cc = 1 }) |
|
||||
| GroupBy | \<this\> | string, parms | 按原生sql语法分组,GroupBy("concat(name, @cc)", new { cc = 1 }) |
|
||||
| Having | \<this\> | string, parms | 按原生sql语法聚合条件过滤,Having("count(name) = @cc", new { cc = 1 }) |
|
||||
| Disdinct | \<this\> | | .Distinct().ToList(x => x.GroupName) 是对指定字段 |
|
||||
| 【排序】 |
|
||||
| OrderBy | \<this\> | Lambda | 按列排序,OrderBy(a => a.Time),可多次使用 |
|
||||
| OrderByDescending | \<this\> | Lambda | 按列倒向排序,OrderByDescending(a => a.Time) |
|
||||
| OrderBy | \<this\> | string, parms | 按原生sql语法排序,OrderBy("count(name) + ?cc", new { cc = 1 }) |
|
||||
| OrderBy | \<this\> | string, parms | 按原生sql语法排序,OrderBy("count(name) + @cc", new { cc = 1 }) |
|
||||
| OrderByPropertyName | string, bool | 按属性名字符串排序(支持导航属性) |
|
||||
| 【联表】 |
|
||||
| LeftJoin | \<this\> | Lambda | 左联查询,可使用导航属性,或指定关联的实体类型 |
|
||||
| InnerJoin | \<this\> | Lambda | 联接查询,可使用导航属性,或指定关联的实体类型 |
|
||||
| RightJoin | \<this\> | Lambda | 右联查询,可使用导航属性,或指定关联的实体类型 |
|
||||
| LeftJoin | \<this\> | string, parms | 左联查询,使用原生sql语法,LeftJoin("type b on b.id = a.id and b.clicks > ?clicks", new { clicks = 1 }) |
|
||||
| InnerJoin | \<this\> | string, parms | 联接查询,使用原生sql语法,InnerJoin("type b on b.id = a.id and b.clicks > ?clicks", new { clicks = 1 }) |
|
||||
| RightJoin | \<this\> | string, parms | 右联查询,使用原生sql语法,RightJoin("type b on b.id = a.id and b.clicks > ?clicks", new { clicks = 1 }) |
|
||||
| LeftJoin | \<this\> | string, parms | 左联查询,使用原生sql语法,LeftJoin("type b on b.id = a.id and b.clicks > @clicks", new { clicks = 1 }) |
|
||||
| InnerJoin | \<this\> | string, parms | 联接查询,使用原生sql语法,InnerJoin("type b on b.id = a.id and b.clicks > @clicks", new { clicks = 1 }) |
|
||||
| RightJoin | \<this\> | string, parms | 右联查询,使用原生sql语法,RightJoin("type b on b.id = a.id and b.clicks > @clicks", new { clicks = 1 }) |
|
||||
| From | \<this\> | Lambda | 多表查询,3个表以上使用非常方便,目前设计最大支持10个表 |
|
||||
| 【其他】 |
|
||||
| As | \<this\> | string alias = "a" | 指定别名 |
|
||||
@@ -219,9 +219,9 @@ DbContext 自身 = 完整事务,BaseRepository 不一定有事务(可通过
|
||||
| Set | \<this\> | Lambda, value | 设置列的新值,Set(a => a.Name, "newvalue") |
|
||||
| Set | \<this\> | Lambda | 设置列的的新值为基础上增加,Set(a => a.Clicks + 1),相当于 clicks=clicks+1 |
|
||||
| SetDto | \<this\> | object | 根据 dto 更新的方法 |
|
||||
| SetRaw | \<this\> | string, parms | 设置值,自定义SQL语法,SetRaw("title = ?title", new { title = "newtitle" }) |
|
||||
| SetRaw | \<this\> | string, parms | 设置值,自定义SQL语法,SetRaw("title = @title", new { title = "newtitle" }) |
|
||||
| Where | \<this\> | Lambda | 表达式条件,仅支持实体基础成员(不包含导航对象) |
|
||||
| Where | \<this\> | string, parms | 原生sql语法条件,Where("id = ?id", new { id = 1 }) |
|
||||
| Where | \<this\> | string, parms | 原生sql语法条件,Where("id = @id", new { id = 1 }) |
|
||||
| Where | \<this\> | T1 \| IEnumerable\<T1\> | 传入实体或集合,将其主键作为条件 |
|
||||
| WhereExists | \<this\> | ISelect | 子查询是否存在 |
|
||||
| CommandTimeout | \<this\> | int | 命令超时设置(秒) |
|
||||
@@ -238,7 +238,7 @@ DbContext 自身 = 完整事务,BaseRepository 不一定有事务(可通过
|
||||
| 方法 | 返回值 | 参数 | 描述 |
|
||||
| - | - | - | - |
|
||||
| Where | \<this\> | Lambda | 表达式条件,仅支持实体基础成员(不包含导航对象) |
|
||||
| Where | \<this\> | string, parms | 原生sql语法条件,Where("id = ?id", new { id = 1 }) |
|
||||
| Where | \<this\> | string, parms | 原生sql语法条件,Where("id = @id", new { id = 1 }) |
|
||||
| Where | \<this\> | T1 \| IEnumerable\<T1\> | 传入实体或集合,将其主键作为条件 |
|
||||
| WhereExists | \<this\> | ISelect | 子查询是否存在 |
|
||||
| CommandTimeout | \<this\> | int | 命令超时设置(秒) |
|
||||
|
||||
@@ -78,7 +78,7 @@ var repo = fsql.GetRepository<Topic>();
|
||||
var item = repo.Where(a => a.Id == 1).First(); //此时快照 item
|
||||
item.Title = "newtitle";
|
||||
repo.Update(item); //对比快照时的变化
|
||||
//UPDATE `tb_topic` SET `Title` = ?p_0
|
||||
//UPDATE `tb_topic` SET `Title` = @p_0
|
||||
//WHERE (`Id` = 1)
|
||||
```
|
||||
|
||||
@@ -89,7 +89,7 @@ var item = new Topic { Id = 1 };
|
||||
repo.Attach(item); //此时快照 item
|
||||
item.Title = "newtitle";
|
||||
repo.Update(item); //对比快照时的变化
|
||||
//UPDATE `tb_topic` SET `Title` = ?p_0
|
||||
//UPDATE `tb_topic` SET `Title` = @p_0
|
||||
//WHERE (`Id` = 1)
|
||||
```
|
||||
|
||||
|
||||
34
修改.md
34
修改.md
@@ -69,7 +69,7 @@ fsql.Update<Topic>()
|
||||
.Set(a => a.Time, DateTime.Now)
|
||||
.Where(a => a.Id == 1)
|
||||
.ExecuteAffrows();
|
||||
//UPDATE `Topic` SET `Title` = ?p_0, `Time` = ?p_1
|
||||
//UPDATE `Topic` SET `Title` = @p_0, `Time` = @p_1
|
||||
//WHERE (Id = 1)
|
||||
```
|
||||
|
||||
@@ -83,7 +83,7 @@ var repo = fsql.GetRepository<Topic>();
|
||||
var item = repo.Where(a => a.Id == 1).First(); //此时快照 item
|
||||
item.Title = "newtitle";
|
||||
repo.Update(item); //对比快照时的变化
|
||||
//UPDATE `Topic` SET `Title` = ?p_0
|
||||
//UPDATE `Topic` SET `Title` = @p_0
|
||||
//WHERE (`Id` = 1)
|
||||
```
|
||||
|
||||
@@ -94,7 +94,7 @@ var item = new Topic { Id = 1 };
|
||||
repo.Attach(item); //此时快照 item
|
||||
item.Title = "newtitle";
|
||||
repo.Update(item); //对比快照时的变化
|
||||
//UPDATE `Topic` SET `Title` = ?p_0
|
||||
//UPDATE `Topic` SET `Title` = @p_0
|
||||
//WHERE (`Id` = 1)
|
||||
```
|
||||
|
||||
@@ -112,21 +112,21 @@ var item = new Topic { Id = 1, Title = "newtitle" };
|
||||
fsql.Update<Topic>()
|
||||
.SetSource(item)
|
||||
.ExecuteAffrows();
|
||||
//UPDATE `Topic` SET `Clicks` = ?p_0, `Title` = ?p_1, `CreateTime` = ?p_2
|
||||
//UPDATE `Topic` SET `Clicks` = @p_0, `Title` = @p_1, `CreateTime` = @p_2
|
||||
//WHERE (`Id` = 1)
|
||||
|
||||
fsql.Update<Topic>()
|
||||
.SetSource(item)
|
||||
.UpdateColumns(a => new { a.Title, a.CreateTime })
|
||||
.ExecuteAffrows();
|
||||
//UPDATE `Topic` SET `Title` = ?p_0, `CreateTime` = ?p_1
|
||||
//UPDATE `Topic` SET `Title` = @p_0, `CreateTime` = @p_1
|
||||
//WHERE (`Id` = 1)
|
||||
|
||||
fsql.Update<Topic>()
|
||||
.SetSource(item)
|
||||
.IgnoreColumns(a => new { a.Clicks, a.CreateTime })
|
||||
.ExecuteAffrows();
|
||||
//UPDATE `Topic` SET `Title` = ?p_0
|
||||
//UPDATE `Topic` SET `Title` = @p_0
|
||||
//WHERE (`Id` = 1)
|
||||
|
||||
var items = new List<Topic>();
|
||||
@@ -135,23 +135,23 @@ for (var a = 0; a < 10; a++) items.Add(new Topic { Id = a + 1, Title = $"newtitl
|
||||
fsql.Update<Topic>()
|
||||
.SetSource(items)
|
||||
.ExecuteAffrows();
|
||||
//UPDATE `Topic` SET `Clicks` = CASE `Id` WHEN 1 THEN ?p_0 WHEN 2 THEN ?p_1 WHEN 3 THEN ?p_2 WHEN 4 THEN ?p_3 WHEN 5 THEN ?p_4 WHEN 6 THEN ?p_5 WHEN 7 THEN ?p_6 WHEN 8 THEN ?p_7 WHEN 9 THEN ?p_8 WHEN 10 THEN ?p_9 END,
|
||||
//`Title` = CASE `Id` WHEN 1 THEN ?p_10 WHEN 2 THEN ?p_11 WHEN 3 THEN ?p_12 WHEN 4 THEN ?p_13 WHEN 5 THEN ?p_14 WHEN 6 THEN ?p_15 WHEN 7 THEN ?p_16 WHEN 8 THEN ?p_17 WHEN 9 THEN ?p_18 WHEN 10 THEN ?p_19 END,
|
||||
//`CreateTime` = CASE `Id` WHEN 1 THEN ?p_20 WHEN 2 THEN ?p_21 WHEN 3 THEN ?p_22 WHEN 4 THEN ?p_23 WHEN 5 THEN ?p_24 WHEN 6 THEN ?p_25 WHEN 7 THEN ?p_26 WHEN 8 THEN ?p_27 WHEN 9 THEN ?p_28 WHEN 10 THEN ?p_29 END
|
||||
//UPDATE `Topic` SET `Clicks` = CASE `Id` WHEN 1 THEN @p_0 WHEN 2 THEN @p_1 WHEN 3 THEN @p_2 WHEN 4 THEN @p_3 WHEN 5 THEN @p_4 WHEN 6 THEN @p_5 WHEN 7 THEN @p_6 WHEN 8 THEN @p_7 WHEN 9 THEN @p_8 WHEN 10 THEN @p_9 END,
|
||||
//`Title` = CASE `Id` WHEN 1 THEN @p_10 WHEN 2 THEN @p_11 WHEN 3 THEN @p_12 WHEN 4 THEN @p_13 WHEN 5 THEN @p_14 WHEN 6 THEN @p_15 WHEN 7 THEN @p_16 WHEN 8 THEN @p_17 WHEN 9 THEN @p_18 WHEN 10 THEN @p_19 END,
|
||||
//`CreateTime` = CASE `Id` WHEN 1 THEN @p_20 WHEN 2 THEN @p_21 WHEN 3 THEN @p_22 WHEN 4 THEN @p_23 WHEN 5 THEN @p_24 WHEN 6 THEN @p_25 WHEN 7 THEN @p_26 WHEN 8 THEN @p_27 WHEN 9 THEN @p_28 WHEN 10 THEN @p_29 END
|
||||
//WHERE (`Id` IN (1,2,3,4,5,6,7,8,9,10))
|
||||
|
||||
fsql.Update<Topic>()
|
||||
.SetSource(items)
|
||||
.IgnoreColumns(a => new { a.Clicks, a.CreateTime })
|
||||
.ExecuteAffrows();
|
||||
//UPDATE `Topic` SET `Title` = CASE `Id` WHEN 1 THEN ?p_0 WHEN 2 THEN ?p_1 WHEN 3 THEN ?p_2 WHEN 4 THEN ?p_3 WHEN 5 THEN ?p_4 WHEN 6 THEN ?p_5 WHEN 7 THEN ?p_6 WHEN 8 THEN ?p_7 WHEN 9 THEN ?p_8 WHEN 10 THEN ?p_9 END
|
||||
//UPDATE `Topic` SET `Title` = CASE `Id` WHEN 1 THEN @p_0 WHEN 2 THEN @p_1 WHEN 3 THEN @p_2 WHEN 4 THEN @p_3 WHEN 5 THEN @p_4 WHEN 6 THEN @p_5 WHEN 7 THEN @p_6 WHEN 8 THEN @p_7 WHEN 9 THEN @p_8 WHEN 10 THEN @p_9 END
|
||||
//WHERE (`Id` IN (1,2,3,4,5,6,7,8,9,10))
|
||||
|
||||
fsql.Update<Topic>()
|
||||
.SetSource(items)
|
||||
.Set(a => a.CreateTime, DateTime.Now)
|
||||
.ExecuteAffrows();
|
||||
//UPDATE `Topic` SET `CreateTime` = ?p_0
|
||||
//UPDATE `Topic` SET `CreateTime` = @p_0
|
||||
//WHERE (`Id` IN (1,2,3,4,5,6,7,8,9,10))
|
||||
```
|
||||
|
||||
@@ -161,10 +161,10 @@ fsql.Update<Topic>()
|
||||
|
||||
```csharp
|
||||
fsql.Update<Topic>()
|
||||
.SetRaw("Title = ?title", new { title = "新标题" })
|
||||
.Where("Id = ?id", 1)
|
||||
.SetRaw("Title = @title", new { title = "新标题" })
|
||||
.Where("Id = @id", 1)
|
||||
.ExecuteAffrows();
|
||||
//UPDATE `Topic` SET Title = ?title WHERE (Id = ?id)
|
||||
//UPDATE `Topic` SET Title = @title WHERE (Id = @id)
|
||||
```
|
||||
|
||||
## 5、根据 Dto 更新
|
||||
@@ -174,7 +174,7 @@ fsql.Update<T>()
|
||||
.SetDto(new { title = "xxx", clicks = 2 })
|
||||
.Where(a => a.Id == 1)
|
||||
.ExecuteAffrows();
|
||||
//UPDATE `Topic` SET `Title` = ?p_0, `Clicks` = ?p_1 WHERE (Id = 1)
|
||||
//UPDATE `Topic` SET `Title` = @p_0, `Clicks` = @p_1 WHERE (Id = 1)
|
||||
|
||||
fsql.Update<T>()
|
||||
.SetDto(new Dictionary<string, object> { ["title"] = "xxx", ["clicks"] = 2 })
|
||||
@@ -258,9 +258,9 @@ UPDATE `T1` SET Title = '111' WHERE id in (select a.id from T1 a left join Optio
|
||||
| Set | \<this\> | Lambda, value | 设置列的新值,Set(a => a.Name, "newvalue") |
|
||||
| Set | \<this\> | Lambda | 设置列的的新值为基础上增加,Set(a => a.Clicks + 1),相当于 clicks=clicks+1 |
|
||||
| SetDto | \<this\> | object | 根据 dto 更新的方法 |
|
||||
| SetRaw | \<this\> | string, parms | 设置值,自定义SQL语法,SetRaw("title = ?title", new { title = "newtitle" }) |
|
||||
| SetRaw | \<this\> | string, parms | 设置值,自定义SQL语法,SetRaw("title = @title", new { title = "newtitle" }) |
|
||||
| Where | \<this\> | Lambda | 表达式条件,仅支持实体基础成员(不包含导航对象) |
|
||||
| Where | \<this\> | string, parms | 原生sql语法条件,Where("id = ?id", new { id = 1 }) |
|
||||
| Where | \<this\> | string, parms | 原生sql语法条件,Where("id = @id", new { id = 1 }) |
|
||||
| Where | \<this\> | T1 \| IEnumerable\<T1\> | 传入实体或集合,将其主键作为条件 |
|
||||
| WhereExists | \<this\> | ISelect | 子查询是否存在 |
|
||||
| CommandTimeout | \<this\> | int | 命令超时设置(秒) |
|
||||
|
||||
@@ -45,8 +45,8 @@ var list = fsql.Select<Topic>()
|
||||
| Avg | T | Lambda | 指定一个列求平均值 |
|
||||
| 【分组】 |
|
||||
| GroupBy | \<this\> | Lambda | 按选择的列分组,GroupBy(a => a.Name) | GroupBy(a => new{a.Name,a.Time}) |
|
||||
| GroupBy | \<this\> | string, parms | 按原生sql语法分组,GroupBy("concat(name, ?cc)", new { cc = 1 }) |
|
||||
| Having | \<this\> | string, parms | 按原生sql语法聚合条件过滤,Having("count(name) = ?cc", new { cc = 1 }) |
|
||||
| GroupBy | \<this\> | string, parms | 按原生sql语法分组,GroupBy("concat(name, @cc)", new { cc = 1 }) |
|
||||
| Having | \<this\> | string, parms | 按原生sql语法聚合条件过滤,Having("count(name) = @cc", new { cc = 1 }) |
|
||||
| 【成员】 |
|
||||
| Key | | | 返回 GroupBy 选择的对象 |
|
||||
| Value | | | 返回主表 或 From\<T2,T3....\> 的字段选择器 |
|
||||
|
||||
6
删除.md
6
删除.md
@@ -51,8 +51,8 @@ var t4 = fsql.Delete<Topic>(new { id = 1 }).ToSql();
|
||||
var t5 = fsql.Delete<Topic>().Where(a => a.Id == 1).ToSql();
|
||||
//DELETE FROM `Topic` WHERE (`Id` = 1)
|
||||
|
||||
var t6 = fsql.Delete<Topic>().Where("id = ?id", new { id = 1 }).ToSql();
|
||||
//DELETE FROM `Topic` WHERE (id = ?id)
|
||||
var t6 = fsql.Delete<Topic>().Where("id = @id", new { id = 1 }).ToSql();
|
||||
//DELETE FROM `Topic` WHERE (id = @id)
|
||||
|
||||
var item = new Topic { Id = 1, Title = "newtitle" };
|
||||
var t7 = fsql.Delete<Topic>().Where(item).ToSql();
|
||||
@@ -96,7 +96,7 @@ DELETE FROM `T1` WHERE id in (select a.id from T1 a left join Options b on b.t1i
|
||||
| 方法 | 返回值 | 参数 | 描述 |
|
||||
| - | - | - | - |
|
||||
| Where | \<this\> | Lambda | 表达式条件,仅支持实体基础成员(不包含导航对象) |
|
||||
| Where | \<this\> | string, parms | 原生sql语法条件,Where("id = ?id", new { id = 1 }) |
|
||||
| Where | \<this\> | string, parms | 原生sql语法条件,Where("id = @id", new { id = 1 }) |
|
||||
| Where | \<this\> | T1 \| IEnumerable\<T1\> | 传入实体或集合,将其主键作为条件 |
|
||||
| WhereExists | \<this\> | ISelect | 子查询是否存在 |
|
||||
| CommandTimeout | \<this\> | int | 命令超时设置(秒) |
|
||||
|
||||
4
单表查询.md
4
单表查询.md
@@ -41,11 +41,11 @@ fsql.Select<Topic>()
|
||||
## WithSql
|
||||
```csharp
|
||||
fsql.Select<Topic>()
|
||||
.WithSql("select * from Topic where clicks > ?val", new { val = 10 })
|
||||
.WithSql("select * from Topic where clicks > @val", new { val = 10 })
|
||||
.Page(1, 10)
|
||||
.ToList()
|
||||
//SELECT a.`Id`, a.`Clicks`, a.`CategoryId`, a.`Title`, a.`CreateTime`
|
||||
//FROM (select * from Topic where clicks > ?val) a
|
||||
//FROM (select * from Topic where clicks > @val) a
|
||||
```
|
||||
|
||||
> WithSql 使用多次为 UNION ALL 查询
|
||||
|
||||
12
多表查询.md
12
多表查询.md
@@ -77,8 +77,8 @@ fsql.Select<Topic, Category, CategoryType>()
|
||||
```csharp
|
||||
fsql.Select<Topic, Category, CategoryType>()
|
||||
.WithSql(
|
||||
"select * from Topic where id=?id1",
|
||||
"select * from Category where id=?id2",
|
||||
"select * from Topic where id=@id1",
|
||||
"select * from Category where id=@id2",
|
||||
null, //不设置 CategoryType 对应的 SQL
|
||||
new { id1 = 10, id2 = 11, id3 = 13 }
|
||||
)
|
||||
@@ -86,19 +86,19 @@ fsql.Select<Topic, Category, CategoryType>()
|
||||
.LeftJoin((a,b,c) => b.ParentId == c.Id)
|
||||
.ToList();
|
||||
//SELECT ...
|
||||
//FROM ( select * from Topic where id=?id1 ) a
|
||||
//LEFT JOIN ( select * from Category where id=?id2 ) b ON a.`CategoryId` = b.`Id`
|
||||
//FROM ( select * from Topic where id=@id1 ) a
|
||||
//LEFT JOIN ( select * from Category where id=@id2 ) b ON a.`CategoryId` = b.`Id`
|
||||
//LEFT JOIN `CategoryType` c ON b.`ParentId` = c.`Id`
|
||||
```
|
||||
|
||||
## 4、SQL联表
|
||||
```csharp
|
||||
fsql.Select<Topic>()
|
||||
.LeftJoin("Category b on b.Id = a.CategoryId and b.Name = ?bname", new { bname = "xxx" })
|
||||
.LeftJoin("Category b on b.Id = a.CategoryId and b.Name = @bname", new { bname = "xxx" })
|
||||
.ToList();
|
||||
//SELECT a.`Id`, a.`Title`, a.`Clicks`, a.`CreateTime`, a.`CategoryId`
|
||||
//FROM `Topic` a
|
||||
//LEFT JOIN Category b on b.Id = a.CategoryId and b.Name = ?bname
|
||||
//LEFT JOIN Category b on b.Id = a.CategoryId and b.Name = @bname
|
||||
```
|
||||
|
||||
延伸问题:SQL联表 b 表的字段如何在 ToList 中指定?
|
||||
|
||||
16
查询.md
16
查询.md
@@ -98,27 +98,27 @@ fsql.Select<VM_District_Parent>().WhereDynamicFilter(dyfilter).ToList();
|
||||
| 【条件】 |
|
||||
| Where | \<this\> | Lambda | 支持多表查询表达式,多次使用相当于AND |
|
||||
| WhereIf | \<this\> | bool, Lambda | 支持多表查询表达式 |
|
||||
| Where | \<this\> | string, parms | 原生sql语法条件,Where("id = ?id", new { id = 1 }) |
|
||||
| WhereIf | \<this\> | bool, string, parms | 原生sql语法条件,WhereIf(true, "id = ?id", new { id = 1 }) |
|
||||
| Where | \<this\> | string, parms | 原生sql语法条件,Where("id = @id", new { id = 1 }) |
|
||||
| WhereIf | \<this\> | bool, string, parms | 原生sql语法条件,WhereIf(true, "id = @id", new { id = 1 }) |
|
||||
| WhereCascade | \<this\> | Lambda | 实现多表查询时,向每个表中附加条件 |
|
||||
| WhereDynamicFilter | \<this\> | DynamicFilterInfo | 动态过滤条件(与前端交互) |
|
||||
| 【分组】 |
|
||||
| GroupBy | \<this\> | Lambda | 按选择的列分组,GroupBy(a => a.Name) | GroupBy(a => new{a.Name,a.Time}) |
|
||||
| GroupBy | \<this\> | string, parms | 按原生sql语法分组,GroupBy("concat(name, ?cc)", new { cc = 1 }) |
|
||||
| Having | \<this\> | string, parms | 按原生sql语法聚合条件过滤,Having("count(name) = ?cc", new { cc = 1 }) |
|
||||
| GroupBy | \<this\> | string, parms | 按原生sql语法分组,GroupBy("concat(name, @cc)", new { cc = 1 }) |
|
||||
| Having | \<this\> | string, parms | 按原生sql语法聚合条件过滤,Having("count(name) = @cc", new { cc = 1 }) |
|
||||
| Disdinct | \<this\> | | .Distinct().ToList(x => x.GroupName) 是对指定字段 |
|
||||
| 【排序】 |
|
||||
| OrderBy | \<this\> | Lambda | 按列排序,OrderBy(a => a.Time),可多次使用 |
|
||||
| OrderByDescending | \<this\> | Lambda | 按列倒向排序,OrderByDescending(a => a.Time) |
|
||||
| OrderBy | \<this\> | string, parms | 按原生sql语法排序,OrderBy("count(name) + ?cc", new { cc = 1 }) |
|
||||
| OrderBy | \<this\> | string, parms | 按原生sql语法排序,OrderBy("count(name) + @cc", new { cc = 1 }) |
|
||||
| OrderByPropertyName | string, bool | 按属性名字符串排序(支持导航属性) |
|
||||
| 【联表】 |
|
||||
| LeftJoin | \<this\> | Lambda | 左联查询,可使用导航属性,或指定关联的实体类型 |
|
||||
| InnerJoin | \<this\> | Lambda | 联接查询,可使用导航属性,或指定关联的实体类型 |
|
||||
| RightJoin | \<this\> | Lambda | 右联查询,可使用导航属性,或指定关联的实体类型 |
|
||||
| LeftJoin | \<this\> | string, parms | 左联查询,使用原生sql语法,LeftJoin("type b on b.id = a.id and b.clicks > ?clicks", new { clicks = 1 }) |
|
||||
| InnerJoin | \<this\> | string, parms | 联接查询,使用原生sql语法,InnerJoin("type b on b.id = a.id and b.clicks > ?clicks", new { clicks = 1 }) |
|
||||
| RightJoin | \<this\> | string, parms | 右联查询,使用原生sql语法,RightJoin("type b on b.id = a.id and b.clicks > ?clicks", new { clicks = 1 }) |
|
||||
| LeftJoin | \<this\> | string, parms | 左联查询,使用原生sql语法,LeftJoin("type b on b.id = a.id and b.clicks > @clicks", new { clicks = 1 }) |
|
||||
| InnerJoin | \<this\> | string, parms | 联接查询,使用原生sql语法,InnerJoin("type b on b.id = a.id and b.clicks > @clicks", new { clicks = 1 }) |
|
||||
| RightJoin | \<this\> | string, parms | 右联查询,使用原生sql语法,RightJoin("type b on b.id = a.id and b.clicks > @clicks", new { clicks = 1 }) |
|
||||
| From | \<this\> | Lambda | 多表查询,3个表以上使用非常方便,目前设计最大支持10个表 |
|
||||
| 【其他】 |
|
||||
| As | \<this\> | string alias = "a" | 指定别名 |
|
||||
|
||||
40
添加.md
40
添加.md
@@ -26,7 +26,7 @@ for (var a = 0; a < 10; a++) items.Add(new Topic { Id = a + 1, Title = $"newtitl
|
||||
```csharp
|
||||
var t1 = fsql.Insert(items.First()).ExecuteAffrows();
|
||||
//INSERT INTO `Topic`(`Clicks`, `Title`, `CreateTime`)
|
||||
//VALUES(?Clicks0, ?Title0, ?CreateTime0)
|
||||
//VALUES(@Clicks0, @Title0, @CreateTime0)
|
||||
```
|
||||
|
||||
如果表有自增列,插入数据后应该要返回 id。
|
||||
@@ -49,11 +49,11 @@ repo.Insert(blog);
|
||||
```csharp
|
||||
var t2 = fsql.Insert(items).ExecuteAffrows();
|
||||
//INSERT INTO `Topic`(`Clicks`, `Title`, `CreateTime`)
|
||||
//VALUES(?Clicks0, ?Title0, ?CreateTime0), (?Clicks1, ?Title1, ?CreateTime1),
|
||||
//(?Clicks2, ?Title2, ?CreateTime2), (?Clicks3, ?Title3, ?CreateTime3),
|
||||
//(?Clicks4, ?Title4, ?CreateTime4), (?Clicks5, ?Title5, ?CreateTime5),
|
||||
//(?Clicks6, ?Title6, ?CreateTime6), (?Clicks7, ?Title7, ?CreateTime7),
|
||||
//(?Clicks8, ?Title8, ?CreateTime8), (?Clicks9, ?Title9, ?CreateTime9)
|
||||
//VALUES(@Clicks0, @Title0, @CreateTime0), (@Clicks1, @Title1, @CreateTime1),
|
||||
//(@Clicks2, @Title2, @CreateTime2), (@Clicks3, @Title3, @CreateTime3),
|
||||
//(@Clicks4, @Title4, @CreateTime4), (@Clicks5, @Title5, @CreateTime5),
|
||||
//(@Clicks6, @Title6, @CreateTime6), (@Clicks7, @Title7, @CreateTime7),
|
||||
//(@Clicks8, @Title8, @CreateTime8), (@Clicks9, @Title9, @CreateTime9)
|
||||
```
|
||||
|
||||
> 解决了 SqlServer 批量添加容易导致的错误:传入的请求具有过多的参数。该服务器支持最多 2100 个参数。请减少参数的数目,然后重新发送该请求。
|
||||
@@ -112,15 +112,15 @@ Bulk Copy 操作以扩展方法的形式实现,针对 SqlServer/PostgreSQL/MyS
|
||||
```csharp
|
||||
var t3 = fsql.Insert(items).InsertColumns(a => a.Title).ExecuteAffrows();
|
||||
//INSERT INTO `Topic`(`Title`)
|
||||
//VALUES(?Title0), (?Title1), (?Title2), (?Title3), (?Title4),
|
||||
//(?Title5), (?Title6), (?Title7), (?Title8), (?Title9)
|
||||
//VALUES(@Title0), (@Title1), (@Title2), (@Title3), (@Title4),
|
||||
//(@Title5), (@Title6), (@Title7), (@Title8), (@Title9)
|
||||
|
||||
var t4 = fsql.Insert(items).InsertColumns(a =>new { a.Title, a.Clicks }).ExecuteAffrows();
|
||||
//INSERT INTO `Topic`(`Clicks`, `Title`)
|
||||
//VALUES(?Clicks0, ?Title0), (?Clicks1, ?Title1), (?Clicks2, ?Title2),
|
||||
//(?Clicks3, ?Title3), (?Clicks4, ?Title4), (?Clicks5, ?Title5),
|
||||
//(?Clicks6, ?Title6), (?Clicks7, ?Title7), (?Clicks8, ?Title8),
|
||||
//(?Clicks9, ?Title9)
|
||||
//VALUES(@Clicks0, @Title0), (@Clicks1, @Title1), (@Clicks2, @Title2),
|
||||
//(@Clicks3, @Title3), (@Clicks4, @Title4), (@Clicks5, @Title5),
|
||||
//(@Clicks6, @Title6), (@Clicks7, @Title7), (@Clicks8, @Title8),
|
||||
//(@Clicks9, @Title9)
|
||||
```
|
||||
|
||||
## 5、忽略列
|
||||
@@ -128,15 +128,15 @@ var t4 = fsql.Insert(items).InsertColumns(a =>new { a.Title, a.Clicks }).Execute
|
||||
```csharp
|
||||
var t5 = fsql.Insert(items).IgnoreColumns(a => a.CreateTime).ExecuteAffrows();
|
||||
//INSERT INTO `Topic`(`Clicks`, `Title`)
|
||||
//VALUES(?Clicks0, ?Title0), (?Clicks1, ?Title1), (?Clicks2, ?Title2),
|
||||
//(?Clicks3, ?Title3), (?Clicks4, ?Title4), (?Clicks5, ?Title5),
|
||||
//(?Clicks6, ?Title6), (?Clicks7, ?Title7), (?Clicks8, ?Title8),
|
||||
//(?Clicks9, ?Title9)
|
||||
//VALUES(@Clicks0, @Title0), (@Clicks1, @Title1), (@Clicks2, @Title2),
|
||||
//(@Clicks3, @Title3), (@Clicks4, @Title4), (@Clicks5, @Title5),
|
||||
//(@Clicks6, @Title6), (@Clicks7, @Title7), (@Clicks8, @Title8),
|
||||
//(@Clicks9, @Title9)
|
||||
|
||||
var t6 = fsql.Insert(items).IgnoreColumns(a => new { a.Title, a.CreateTime }).ExecuteAffrows();
|
||||
///INSERT INTO `Topic`(`Clicks`)
|
||||
//VALUES(?Clicks0), (?Clicks1), (?Clicks2), (?Clicks3), (?Clicks4),
|
||||
//(?Clicks5), (?Clicks6), (?Clicks7), (?Clicks8), (?Clicks9)
|
||||
//VALUES(@Clicks0), (@Clicks1), (@Clicks2), (@Clicks3), (@Clicks4),
|
||||
//(@Clicks5), (@Clicks6), (@Clicks7), (@Clicks8), (@Clicks9)
|
||||
```
|
||||
|
||||
## 6、列插入优先级
|
||||
@@ -176,8 +176,8 @@ limit 10
|
||||
```csharp
|
||||
fsql.Insert<Topic>().MySqlIgnoreInto().AppendData(items).ExecuteAffrows();
|
||||
///INSERT IGNORE INTO `Topic`(`Clicks`)
|
||||
//VALUES(?Clicks0), (?Clicks1), (?Clicks2), (?Clicks3), (?Clicks4),
|
||||
//(?Clicks5), (?Clicks6), (?Clicks7), (?Clicks8), (?Clicks9)
|
||||
//VALUES(@Clicks0), (@Clicks1), (@Clicks2), (@Clicks3), (@Clicks4),
|
||||
//(@Clicks5), (@Clicks6), (@Clicks7), (@Clicks8), (@Clicks9)
|
||||
```
|
||||
|
||||
## 9、MySql 特有功能 On Duplicate Key Update
|
||||
|
||||
2
表达式函数.md
2
表达式函数.md
@@ -157,7 +157,7 @@ var fsql = new FreeSqlBuilder() //请务必定义成 Singleton 单例模式
|
||||
|
||||
var id = 1;
|
||||
fsql.Select<Song>().Where(a => a.Id == id).ToList();
|
||||
//SELECT .. FROM `Song` a WHERE `Id` = ?exp_0
|
||||
//SELECT .. FROM `Song` a WHERE `Id` = @exp_0
|
||||
```
|
||||
|
||||
生成的参数对象,DbType、Size、Precision、Scale 值设置默认已作优化,与实体属性定义一致。
|
||||
|
||||
4
返回数据.md
4
返回数据.md
@@ -91,11 +91,11 @@ List<dynamic> t13 = fsql.Ado.Query<dynamic>("select * from song");
|
||||
## 9、WithSql
|
||||
```csharp
|
||||
fsql.Select<Topic>()
|
||||
.WithSql("select * from Topic where clicks > ?val", new { val = 10 })
|
||||
.WithSql("select * from Topic where clicks > @val", new { val = 10 })
|
||||
.Page(1, 10)
|
||||
.ToList()
|
||||
//SELECT a.`Id`, a.`Clicks`, a.`CategoryId`, a.`Title`, a.`CreateTime`
|
||||
//FROM (select * from Topic where clicks > ?val) a
|
||||
//FROM (select * from Topic where clicks > @val) a
|
||||
```
|
||||
|
||||
> WithSql 使用多次为 UNION ALL 查询
|
||||
|
||||
6
骚操作.md
6
骚操作.md
@@ -15,7 +15,7 @@ FreeSql CodeFirst 支持将 c# 代码内的注释,迁移至数据库的备注
|
||||
这个方法可以设置不使用 参数化 执行 SQL 命令,方便开发调试。
|
||||
|
||||
```sql
|
||||
INSERT INTO `tb_topic`(`Title`) VALUES(?Title0)
|
||||
INSERT INTO `tb_topic`(`Title`) VALUES(@Title0)
|
||||
|
||||
INSERT INTO `tb_topic`(`Title`) VALUES('Title_1')
|
||||
```
|
||||
@@ -40,11 +40,11 @@ repo.InsertOrUpdate(实体);
|
||||
# 4、WithSql
|
||||
```csharp
|
||||
fsql.Select<Topic>()
|
||||
.WithSql("select * from Topic where clicks > ?val", new { val = 10 })
|
||||
.WithSql("select * from Topic where clicks > @val", new { val = 10 })
|
||||
.Page(1, 10)
|
||||
.ToList()
|
||||
//SELECT a.`Id`, a.`Clicks`, a.`CategoryId`, a.`Title`, a.`CreateTime`
|
||||
//FROM (select * from Topic where clicks > ?val) a
|
||||
//FROM (select * from Topic where clicks > @val) a
|
||||
```
|
||||
|
||||
> WithSql 使用多次为 UNION ALL 查询
|
||||
|
||||
Reference in New Issue
Block a user