翼度科技»论坛 编程开发 .net 查看内容

.NET 操作 TDengine .NET ORM

7

主题

7

帖子

21

积分

新手上路

Rank: 1

积分
21
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. SqlSugar.TDengineCore
  2. SqlSugarCore
复制代码
  
执行SQL
  1.   //建库
  2.     db.Ado.ExecuteCommand("CREATE DATABASE IF NOT EXISTS power WAL_RETENTION_PERIOD 3600");
  3.   
  4.     //建超级表
  5.     db.Ado.ExecuteCommand("CREATE STABLE IF NOT EXISTS  MyTable (ts TIMESTAMP, current FLOAT, voltage INT, phase FLOAT) TAGS (location BINARY(64), groupId INT)");
  6.   
  7.     //创建子表
  8.     db.Ado.ExecuteCommand(@"create table IF NOT EXISTS  MyTable01 using MyTable tags('California.SanFrancisco',1)");
  9.   
  10.          
  11.     //insert sql
  12.     //db.Ado.ExecuteCommand(insrtSql);
  13.   
  14.     //查询子表
  15.     var dt = db.Ado.GetDataTable("select * from MyTable01");
  16.   
  17.     //查询超级表
  18.     var dt2 = db.Ado.GetDataTable("select * from MyTable");
复制代码
  
单表查询
  1. var list2 = db.Queryable<MyTable02>().Where(it => it.name == "测试2").ToList();
  2. var list22 = db.Queryable<MyTable02>().Where(it => it.voltage == 222).ToList();
  3. var list222 = db.Queryable<MyTable02>().Where(it => it.phase == 1.2).ToList();
  4. var list2222 = db.Queryable<MyTable02>().Where(it => it.isdelete == true).ToList();
复制代码
  
联表查询
  1. //联表查询:不支持left join只能这样
  2.    var list101= db.Queryable<MyTable02, MyTable02>((x, y) => x.ts == y.ts)
  3.                 .Select((x,y) => new
  4.                 {
  5.                     xts=x.ts,
  6.                     yts=y.ts
  7.                 }).ToList();
复制代码
  
函数用法
  1. //模糊查询
  2.   var list3 = db.Queryable<MyTable02>().Where(it => it.name.Contains("a")).ToList();
  3. //时间差函数
  4. var list31 = db.Queryable<MyTable02>().Select(it =>
  5.             new
  6.             {
  7.                 diff = SqlFunc.DateDiff(DateType.Day, it.ts, DateTime.Now),
  8.                 time=it.ts
  9.             }).ToList();
  10.   //时间加1天
  11.   var list32 = db.Queryable<MyTable02>().Select(it =>
  12.               new
  13.               {
  14.                   addTime = SqlFunc.DateAdd(it.ts,1, DateType.Day),
  15.                   oldime = it.ts
  16.               }).ToList();
  17.                
  18.   //自定义函数:实现时间加1天
  19.     var list33 = db.Queryable<MyTable02>().Select(it =>
  20.               new
  21.               {
  22.                   addTime =SqlFunc.MappingColumn<DateTime>(" `ts`+1d "),
  23.                   oldime = it.ts
  24.               }).ToList();
复制代码
  
分页查询
  1.    //分页
  2.    var Count = 0;
  3.   var list4 = db.Queryable<MyTable02>().Where(it => it.voltage == 111)
  4.                 .ToPageList(1, 2, ref Count);
复制代码
  
插入

超级表是不能插入的,我们只插入子表
  1. //批量插入子表
  2.   db.Insertable(GetInsertDatas()).ExecuteCommand();
  3.   //子表实体
  4.   public class MyTable02
  5.   {
  6.             [SugarColumn(IsPrimaryKey =true)]
  7.             public DateTime ts { get; set; }
  8.             public float current { get; set; }
  9.             public bool isdelete { get; set; }
  10.             public string name { get; set; }
  11.             public int voltage { get; set; }
  12.             public float phase { get; set; }
  13.             [SugarColumn(IsOnlyIgnoreInsert =true,IsOnlyIgnoreUpdate =true)]//Tags字段禁止插入
  14.             public string location { get; set; }
  15.             [SugarColumn(IsOnlyIgnoreInsert = true, IsOnlyIgnoreUpdate = true)]//Tags字段禁止插入
  16.             public int groupId { get; set; }
  17.    }
复制代码
  
删除数据

只能范围删除不能直接等于删除
  1. var count = db.Deleteable<MyTable02>().Where(it => it.ts>time).ExecuteCommand();
复制代码
  
源码和DEMO

找到TDengineTests文件夹
https://github.com/DotNetNext/SqlSugar
 

 
SqlSugar 下面打算支持 Mongodb ,让Mongodb也能在ORM中愉快使用,预计会在今年12月份左右开发完成
 

来源:https://www.cnblogs.com/sunkaixuan/archive/2023/08/27/17660916.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具