mirror of
https://github.com/dotnetcore/FreeSql.git
synced 2026-02-03 15:00:53 +08:00
update
32
分组聚合查询.md
32
分组聚合查询.md
@@ -3,7 +3,8 @@ static IFreeSql fsql = new FreeSql.FreeSqlBuilder()
|
||||
.UseConnectionString(FreeSql.DataType.MySql, connectionString)
|
||||
.Build(); //请务必定义成 Singleton 单例模式
|
||||
|
||||
class Topic {
|
||||
class Topic
|
||||
{
|
||||
[Column(IsIdentity = true, IsPrimary = true)]
|
||||
public int Id { get; set; }
|
||||
public int Clicks { get; set; }
|
||||
@@ -31,6 +32,35 @@ var list = fsql.Select<Topic>()
|
||||
|
||||
> 不分组求聚合值,请使用 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
|
||||
|
||||
| 方法 | 返回值 | 参数 | 描述 |
|
||||
|
||||
Reference in New Issue
Block a user