c treelist绑定mysql_FreeSql (二十一)查询返回数据

FreeSql 采用 ExpressionTree 优化读取速读,如果懂技术的你一定知道 .NETCore 技术下除了原生代码,最快就是 Emit 和 ExpressionTree。项目在初期使用的反射+缓存,虽然 .NETCore 优化了反射性能,但经过与Dapper性能测试对比之后,发现仍然有一定差距,改成 ExpresstionTree 后才与 Dapper 性能相当。FreeSql 支持的类型较多,实现 ExpressionTree 的复杂度较大,有兴趣的朋友可以翻阅源代码。

1、返回单条记录

Topic t1 = fsql.Select().ToOne();

FreeSql有一个约定,ToOne 永远返回 null 或 有数据的实体对象,ToList 永远返回非 null 的 List

2、返回 List

List t1 = fsql.Select().ToList();

3、返回 TreeList

List t2 = fsql.Select.ToTreeList();

查询数据加工为树型,注意:实体需要配置父子导航属性

4、返回 List + 导航属性的数据

List t3 = fsql.Select().LeftJoin(a => a.Type.Id == a.TypeId).ToList();

//此时会返回普通字段 + 导航对象 Type 的数据

5、指定字段返回

//返回一个字段

List t4 = fsql.Select().ToList(a => a.Id);

//返回匿名类

List t5 = fsql.Select().ToList(a => new { a.Id, a.Title });

//返回元组

List t6 = fsql.Select().ToList("id, title");

//返回SQL字段

List t7 = fsql.Select().ToList(a => new {

a.Id,

a.Title,

a.Type, //可以直接返回导航属性 Type

cstitle = "substr(a.title, 0, 2)", //将 substr(a.title, 0, 2) 作为查询字段

csnow = Convert.ToDateTime("now()"), //将 now() 作为查询字段

//奇思妙想:怎么查询开窗函数的结果

});

//返回子查询的字段

List t8 = fsql.Select().ToList(a => new {

a.Id,

count = fsql.Select().Count(),

max = fsql.Select().Max(b => b.Id),

min = fsql.Select().Min(b => b.Id),

name = fsql.Select<2>().First(b => b.name)

});

6、执行SQL

class xxx {

public int Id { get; set; }

public string Path { get; set; }

public string Title2 { get; set; }

}

List t9 = fsql.Ado.Query("select * from song");

List t10 = fsql.Ado.Query("select * from song");

List t11 = fsql.Ado.Query("select * from song");

注意:Ado.Query 的实体特性是无效的,比如 [Column(Name = "xxx")] 无效

7、WithSql

fsql.Select()

.WithSql("select * from Topic where clicks > 10")

.Page(1, 10)

.ToList()

//SELECT a.`Id`, a.`Clicks`, a.`CategoryId`, a.`Title`, a.`CreateTime`

//FROM (select * from Topic where clicks > 10) a

WithSql 使用多次为 UNION ALL 查询

8、ToChunk

执行查询,分块返回数据,可减少内存开销。比如读取10万条数据,每次返回100条处理。

var testlist1 = fsql.Select().OrderBy(a => a.Id).ToList();

var testlist2 = new List();

fsql.Select().OrderBy(a => a.Id).ToChunk(100, list =>

{

testlist2.AddRange(list);

});

//这里示范,最终 testlist1 与 testlist2 返回的数据相同。

API

方法

返回值

参数

描述

ToSql

string

返回即将执行的SQL语句

ToList

List

执行SQL查询,返回 T1 实体所有字段的记录,若存在导航属性则一起查询返回,记录不存在时返回 Count 为 0 的列表

ToList

List

Lambda

执行SQL查询,返回指定字段或Dto映射的记录,记录不存在时返回 Count 为 0 的列表

ToList

List

string field

执行SQL查询,返回 field 指定字段的记录,并以元组或基础类型(int,string,long)接收,记录不存在时返回 Count 为 0 的列表

ToOne

T1

执行SQL查询,返回 T1 实体所有字段的第一条记录,记录不存在时返回 null

ToChunk

int size, Action> done

执行SQL查询,分块返回数据,可减少内存开销。比如读取10万条数据,每次返回100条处理。

Any

bool

执行SQL查询,是否有记录

Sum

T

Lambda

指定一个列求和

Min

T

Lambda

指定一个列求最小值

Max

T

Lambda

指定一个列求最大值

Avg

T

Lambda

指定一个列求平均值

系列文章导航

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值