.NET 操作 TDengine .NET ORM
TDengine
是国内比较流的时序库之一,支持群集并且免费,在.NET中资料比较少,这篇文章主要介绍SqlSugar ORM来操作TDengine
优点:
1、SqlSugar支持ADO.NET操作来实现TDengine,并且支持了常用的时间函数、支持联表、分页和批量插入和删等操作
2、使用了原生连接(非http连接 )保证了TDengine性能
TDengine 连接字符串
1 | Host=localhost;Port=6030;Username=root;Password=taosdata;Database=power |
TDengine 客户端SDK安装
当前程序需要安装Sdk才能连接数据库
https://docs.taosdata.com/connector
TDengine Nuegt安装
下面是NUGET安装
1 2 | SqlSugar.TDengineCore SqlSugarCore |
执行SQL
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | //建库 db.Ado.ExecuteCommand( "CREATE DATABASE IF NOT EXISTS power WAL_RETENTION_PERIOD 3600" ); //建超级表 db.Ado.ExecuteCommand( "CREATE STABLE IF NOT EXISTS MyTable (ts TIMESTAMP, current FLOAT, voltage INT, phase FLOAT) TAGS (location BINARY(64), groupId INT)" ); //创建子表 db.Ado.ExecuteCommand( @"create table IF NOT EXISTS MyTable01 using MyTable tags('California.SanFrancisco',1)" ); //insert sql //db.Ado.ExecuteCommand(insrtSql); //查询子表 var dt = db.Ado.GetDataTable( "select * from MyTable01" ); //查询超级表 var dt2 = db.Ado.GetDataTable( "select * from MyTable" ); |
单表查询
1 2 3 4 | var list2 = db.Queryable<MyTable02>().Where(it => it.name == "测试2" ).ToList(); var list22 = db.Queryable<MyTable02>().Where(it => it.voltage == 222).ToList(); var list222 = db.Queryable<MyTable02>().Where(it => it.phase == 1.2).ToList(); var list2222 = db.Queryable<MyTable02>().Where(it => it.isdelete == true ).ToList(); |
联表查询
1 2 3 4 5 6 7 | //联表查询:不支持left join只能这样 var list101= db.Queryable<MyTable02, MyTable02>((x, y) => x.ts == y.ts) .Select((x,y) => new { xts=x.ts, yts=y.ts }).ToList(); |
函数用法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | //模糊查询 var list3 = db.Queryable<MyTable02>().Where(it => it.name.Contains( "a" )).ToList(); //时间差函数 var list31 = db.Queryable<MyTable02>().Select(it => new { diff = SqlFunc.DateDiff(DateType.Day, it.ts, DateTime.Now), time=it.ts }).ToList(); //时间加1天 var list32 = db.Queryable<MyTable02>().Select(it => new { addTime = SqlFunc.DateAdd(it.ts,1, DateType.Day), oldime = it.ts }).ToList(); //自定义函数:实现时间加1天 var list33 = db.Queryable<MyTable02>().Select(it => new { addTime =SqlFunc.MappingColumn<DateTime>( " `ts`+1d " ), oldime = it.ts }).ToList(); |
分页查询
1 2 3 4 | //分页 var Count = 0; var list4 = db.Queryable<MyTable02>().Where(it => it.voltage == 111) .ToPageList(1, 2, ref Count); |
插入
超级表是不能插入的,我们只插入子表
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | //批量插入子表 db.Insertable(GetInsertDatas()).ExecuteCommand(); //子表实体 public class MyTable02 { [SugarColumn(IsPrimaryKey = true )] public DateTime ts { get ; set ; } public float current { get ; set ; } public bool isdelete { get ; set ; } public string name { get ; set ; } public int voltage { get ; set ; } public float phase { get ; set ; } [SugarColumn(IsOnlyIgnoreInsert = true ,IsOnlyIgnoreUpdate = true )] //Tags字段禁止插入 public string location { get ; set ; } [SugarColumn(IsOnlyIgnoreInsert = true , IsOnlyIgnoreUpdate = true )] //Tags字段禁止插入 public int groupId { get ; set ; } } |
删除数据
只能范围删除不能直接等于删除
1 | var count = db.Deleteable<MyTable02>().Where(it => it.ts>time).ExecuteCommand(); |
源码和DEMO
找到TDengineTests文件夹
https://github.com/DotNetNext/SqlSugar
SqlSugar 下面打算支持 Mongodb ,让Mongodb也能在ORM中愉快使用,预计会在今年12月份左右开发完成
【推荐】FFA 2024大会视频回放:Apache Flink 的过去、现在及未来
【推荐】中国电信天翼云云端翼购节,2核2G云服务器一口价38元/年
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· [杂谈]如何选择:Session 还是 JWT?
· 硬盘空间消失之谜:Linux 服务器存储排查与优化全过程
· JavaScript是按顺序执行的吗?聊聊JavaScript中的变量提升
· [杂谈]后台日志该怎么打印
· Pascal 架构 GPU 在 vllm下的模型推理优化
· WinForm 通用权限框架,简单实用支持二次开发
· 硬盘空间消失之谜:Linux 服务器存储排查与优化全过程
· 如何为在线客服系统的 Web Api 后台主程序添加 Bootstrap 启动页面
· 面试官:DNS解析都整不明白,敢说你懂网络?我:嘤嘤嘤!
· Fleck:一个轻量级的C#开源WebSocket服务端库