mirror of
https://github.com/dotnetcore/FreeSql.git
synced 2026-02-18 06:10:56 +08:00
update
@@ -182,7 +182,20 @@ fsql.Select<Category>().ToList(a => new {
|
||||
});
|
||||
```
|
||||
|
||||
## 9. Collection properties
|
||||
## 9、Subtable: ToList
|
||||
|
||||
> v3.2.650+
|
||||
|
||||
```csharp
|
||||
fsql.Select<Topic>().ToList(a => new
|
||||
{
|
||||
all = a,
|
||||
list1 = fsql.Select<T2>().ToList(),
|
||||
list2 = fsql.Select<T2>().Where(b => b.TopicId == a.Id).ToList()
|
||||
});
|
||||
```
|
||||
|
||||
## 10. Collection properties
|
||||
|
||||
```csharp
|
||||
fsql.Select<Category>()
|
||||
@@ -200,7 +213,7 @@ fsql.Select<Category>()
|
||||
|
||||
Quickly convert the collection properties to `ISelect` for sub-query operations.
|
||||
|
||||
## 10. WhereCascade
|
||||
## 11. WhereCascade
|
||||
|
||||
When querying multiple tables, it is troublesome to add conditions to each table like `ISelect`, and `WhereCascade` came into being. After using `WhereCascade`, when SQL is generated, all tables will be attached to this condition.
|
||||
|
||||
|
||||
17
多表查询.md
17
多表查询.md
@@ -172,7 +172,20 @@ fsql.Select<Category>().ToList(a => new {
|
||||
});
|
||||
```
|
||||
|
||||
## 9、集合属性
|
||||
## 9、子表ToList
|
||||
|
||||
> v3.2.650+ 以下最多执行3次 SQL
|
||||
|
||||
```csharp
|
||||
fsql.Select<Topic>().ToList(a => new
|
||||
{
|
||||
all = a,
|
||||
list1 = fsql.Select<T2>().ToList(),
|
||||
list2 = fsql.Select<T2>().Where(b => b.TopicId == a.Id).ToList()
|
||||
});
|
||||
```
|
||||
|
||||
## 10、集合属性
|
||||
|
||||
```csharp
|
||||
fsql.Select<Category>()
|
||||
@@ -190,7 +203,7 @@ fsql.Select<Category>()
|
||||
|
||||
将集合属性快速转换为 ISelect 进行子查询操作。
|
||||
|
||||
## 10、WhereCascade
|
||||
## 11、WhereCascade
|
||||
|
||||
多表查询时,像isdeleted每个表都给条件,挺麻烦的。WhereCascade使用后生成sql时,所有表都附上这个条件。
|
||||
|
||||
|
||||
84
表达式函数.md
84
表达式函数.md
@@ -115,38 +115,84 @@ fsql.Select<T>()
|
||||
|
||||
```csharp
|
||||
fsql.Select<T1, T2>()
|
||||
.InnerJoin((a, b) => b.Id == a.Id)
|
||||
.ToList((a, b) => new
|
||||
{
|
||||
Id = a.Id,
|
||||
EdiId = b.Id,
|
||||
over1 = SqlExt.Rank().Over().OrderBy(a.Id).OrderByDescending(b.EdiId).ToValue()
|
||||
});
|
||||
.InnerJoin((a, b) => b.Id == a.Id)
|
||||
.ToList((a, b) => new
|
||||
{
|
||||
Id = a.Id,
|
||||
EdiId = b.Id,
|
||||
over1 = SqlExt.Rank().Over().OrderBy(a.Id).OrderByDescending(b.EdiId).ToValue()
|
||||
});
|
||||
```
|
||||
|
||||
> v1.6.0 利用自定义解析功能,增加 SqlExt.Rank().Over().PartitionBy(...)、MySql group_concat 常用函数,欢迎 PR 补充
|
||||
|
||||
## 返回子查询字段
|
||||
## 子表Exists
|
||||
|
||||
```c#
|
||||
fsql.Select<Topic>()
|
||||
.Where(a => fsql.Select<Topic>().As("b").Where(b => b.Id == a.Id).Any())
|
||||
.ToList();
|
||||
//SELECT a.`Id`, a.`Title`, a.`Clicks`, a.`CreateTime`, a.`CategoryId`
|
||||
//FROM `Topic` a
|
||||
//WHERE (exists(SELECT 1
|
||||
// FROM `Topic` b
|
||||
// WHERE (b.`Id` = a.`Id`)
|
||||
// limit 0,1))
|
||||
```
|
||||
|
||||
> 提示:由于子查询的实体类与上层相同,使用 As("b") 指明别名,以便区分
|
||||
|
||||
## 子表In
|
||||
|
||||
```c#
|
||||
fsql.Select<Topic>()
|
||||
.Where(a => fsql.Select<Topic>().As("b").ToList(b => b.Id).Contains(a.Id))
|
||||
.ToList();
|
||||
//SELECT a.`Id`, a.`Title`, a.`Clicks`, a.`CreateTime`, a.`CategoryId`
|
||||
//FROM `Topic` a
|
||||
//WHERE (((a.`Id`) in (SELECT b.`Id`
|
||||
// FROM `Topic` b)))
|
||||
```
|
||||
|
||||
## 子表Join
|
||||
> v1.8.0+ string.Join + ToList 实现将子查询的多行结果,拼接为一个字符串,如:"1,2,3,4"
|
||||
|
||||
```c#
|
||||
fsql.Select<Topic>().ToList(a => new {
|
||||
id = a.Id,
|
||||
concat = string.Join(",", fsql.Select<StringJoin01>().ToList(b => b.Id))
|
||||
});
|
||||
//SELECT a.`Id`, (SELECT group_concat(b.`Id` separator ',')
|
||||
// FROM `StringJoin01` b)
|
||||
//FROM `Topic` a
|
||||
```
|
||||
|
||||
> 提示:子查询 string.Join + ToList 适配了 sqlserver/pgsql/oracle/mysql/sqlite/firebird/达梦/金仓/南大/翰高 [#405](https://github.com/dotnetcore/FreeSql/issues/405)
|
||||
|
||||
## 子表First/Count/Sum/Max/Min/Avg
|
||||
|
||||
```csharp
|
||||
List<匿名类> t10 = fsql.Select<Topic>().ToList(a => new {
|
||||
a.Id,
|
||||
count = fsql.Select<T2>().Count(),
|
||||
max = fsql.Select<T2>().Max(b => b.Id),
|
||||
min = fsql.Select<T2>().Min(b => b.Id),
|
||||
name = fsql.Select<2>().First(b => b.name)
|
||||
fsql.Select<Category>().ToList(a => new {
|
||||
all = a,
|
||||
first = fsql.Select<Topic>().Where(b => b.CategoryId == a.Id).First(b => b.Id),
|
||||
count = fsql.Select<Topic>().Where(b => b.CategoryId == a.Id).Count(),
|
||||
sum = fsql.Select<Topic>().Where(b => b.CategoryId == a.Id).Sum(b => b.Clicks),
|
||||
max = fsql.Select<Topic>().Where(b => b.CategoryId == a.Id).Max(b => b.Clicks),
|
||||
min = fsql.Select<Topic>().Where(b => b.CategoryId == a.Id).Min(b => b.Clicks),
|
||||
avg = fsql.Select<Topic>().Where(b => b.CategoryId == a.Id).Avg(b => b.Clicks)
|
||||
});
|
||||
```
|
||||
|
||||
## 返回子查询集合
|
||||
## 子表ToList
|
||||
|
||||
> v3.2.650+ 以下最多执行3次 SQL
|
||||
|
||||
```csharp
|
||||
List<匿名类> t11 = fsql.Select<Topic>().ToList(a => new {
|
||||
a.Id,
|
||||
list1 = fsql.Select<T2>().ToList(),
|
||||
list2 = fsql.Select<T2>().Where(b => b.TopicId == a.Id).ToList()
|
||||
fsql.Select<Topic>().ToList(a => new
|
||||
{
|
||||
all = a,
|
||||
list1 = fsql.Select<T2>().ToList(),
|
||||
list2 = fsql.Select<T2>().Where(b => b.TopicId == a.Id).ToList()
|
||||
});
|
||||
```
|
||||
|
||||
|
||||
Reference in New Issue
Block a user