mirror of
https://github.com/dotnetcore/FreeSql.git
synced 2026-02-04 23:40:53 +08:00
update
32
分组聚合查询.md
32
分组聚合查询.md
@@ -3,7 +3,8 @@ static IFreeSql fsql = new FreeSql.FreeSqlBuilder()
|
|||||||
.UseConnectionString(FreeSql.DataType.MySql, connectionString)
|
.UseConnectionString(FreeSql.DataType.MySql, connectionString)
|
||||||
.Build(); //请务必定义成 Singleton 单例模式
|
.Build(); //请务必定义成 Singleton 单例模式
|
||||||
|
|
||||||
class Topic {
|
class Topic
|
||||||
|
{
|
||||||
[Column(IsIdentity = true, IsPrimary = true)]
|
[Column(IsIdentity = true, IsPrimary = true)]
|
||||||
public int Id { get; set; }
|
public int Id { get; set; }
|
||||||
public int Clicks { get; set; }
|
public int Clicks { get; set; }
|
||||||
@@ -31,6 +32,35 @@ var list = fsql.Select<Topic>()
|
|||||||
|
|
||||||
> 不分组求聚合值,请使用 ToAggregate 替代 ToList
|
> 不分组求聚合值,请使用 ToAggregate 替代 ToList
|
||||||
|
|
||||||
|
## 导航属性
|
||||||
|
|
||||||
|
假如 Topic 有导航属性 Category,Category 又有导航属性 Area,导航属性分组代码如下:
|
||||||
|
|
||||||
|
```csharp
|
||||||
|
var list = fsql.Select<Topic>()
|
||||||
|
.GroupBy(a => new { a.Clicks, a.Category })
|
||||||
|
.ToList(a => new { a.Key.Category.Area.Name });
|
||||||
|
```
|
||||||
|
|
||||||
|
如上这样编写,会报错无法解析 a.Key.Category.Area.Name,解决办法使用 Include:
|
||||||
|
|
||||||
|
```csharp
|
||||||
|
var list = fsql.Select<Topic>()
|
||||||
|
.Include(a => a.Category.Area)
|
||||||
|
//必须添加此行,否则只分组 Category 而不包含它的下级导航属性 Area
|
||||||
|
|
||||||
|
.GroupBy(a => new { a.Clicks, a.Category })
|
||||||
|
.ToList(a => new { a.Key.Category.Area.Name });
|
||||||
|
```
|
||||||
|
|
||||||
|
但是,你还可以这样解决:
|
||||||
|
|
||||||
|
```csharp
|
||||||
|
var list = fsql.Select<Topic>()
|
||||||
|
.GroupBy(a => new { a.Clicks, a.Category, a.Category.Area })
|
||||||
|
.ToList(a => new { a.Key.Area.Name });
|
||||||
|
```
|
||||||
|
|
||||||
## API
|
## API
|
||||||
|
|
||||||
| 方法 | 返回值 | 参数 | 描述 |
|
| 方法 | 返回值 | 参数 | 描述 |
|
||||||
|
|||||||
Reference in New Issue
Block a user