- A+
所属分类:.NET技术
TDengine
是国内比较流的时序库之一,支持群集并且免费,在.NET中资料比较少,这篇文章主要介绍SqlSugar ORM来操作TDengine
优点:
1、SqlSugar支持ADO.NET操作来实现TDengine,并且支持了常用的时间函数、支持联表、分页和批量插入和删等操作
2、使用了原生连接(非http连接 )保证了TDengine性能
TDengine 连接字符串
Host=localhost;Port=6030;Username=root;Password=taosdata;Database=power
TDengine 客户端SDK安装
当前程序需要安装Sdk才能连接数据库
https://docs.taosdata.com/connector
TDengine Nuegt安装
下面是NUGET安装
SqlSugar.TDengineCore SqlSugarCore
执行SQL
//建库 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");
单表查询
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();
联表查询
//联表查询:不支持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();
函数用法
//模糊查询 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();
分页查询
//分页 var Count = 0; var list4 = db.Queryable<MyTable02>().Where(it => it.voltage == 111) .ToPageList(1, 2, ref Count);
插入
超级表是不能插入的,我们只插入子表
//批量插入子表 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; } }
删除数据
只能范围删除不能直接等于删除
var count = db.Deleteable<MyTable02>().Where(it => it.ts>time).ExecuteCommand();
源码和DEMO
找到TDengineTests文件夹
https://github.com/DotNetNext/SqlSugar
SqlSugar 下面打算支持 Mongodb ,让Mongodb也能在ORM中愉快使用,预计会在今年12月份左右开发完成