.NET 操作 TDengine .NET ORM

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

相关推荐
ss2732 小时前
为什么PostgreSQL适合AI场景?
数据库·人工智能·postgresql
瑞克-桑切斯3 小时前
7、MySQL 慢查询排查与优化实战指南
java·服务器·数据库
z06.3 小时前
MySQL索引
数据库·mysql
考虑考虑4 小时前
Posrgresql恢复.backup文件
数据库·后端·postgresql
云祺vinchin4 小时前
中小企业备份软件选型从恢复需求到总体成本评估
数据库·数据备份·中小企业备份·容灾备份软件
Zenova EdgeOS4 小时前
Go 工业边缘错误处理实战:用 errors 构建可追溯错误链
开发语言·数据库·golang
KKKlucifer4 小时前
国内数据安全服务的产品智能化转型:大模型赋能下的技术能力重构分析
大数据·数据库·重构
字节跳动开源5 小时前
OpenViking 上线原生 3D 内容理解模型
数据库·开源
CCIE-Yasuo7 小时前
网络安全-学习数据库-Mysql-2
数据库·学习·mysql
这个DBA有点耶7 小时前
内核级AI与多模融合:AI数据库在海外场景的落地要点
数据库·人工智能·架构