.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文件夹

 

 

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

 

posted @   阿妮亚  阅读(351)  评论(0编辑  收藏  举报
编辑推荐:
· [杂谈]如何选择:Session 还是 JWT?
· 硬盘空间消失之谜:Linux 服务器存储排查与优化全过程
· JavaScript是按顺序执行的吗?聊聊JavaScript中的变量提升
· [杂谈]后台日志该怎么打印
· Pascal 架构 GPU 在 vllm下的模型推理优化
阅读排行:
· WinForm 通用权限框架,简单实用支持二次开发
· 硬盘空间消失之谜:Linux 服务器存储排查与优化全过程
· 如何为在线客服系统的 Web Api 后台主程序添加 Bootstrap 启动页面
· 面试官:DNS解析都整不明白,敢说你懂网络?我:嘤嘤嘤!
· Fleck:一个轻量级的C#开源WebSocket服务端库
点击右上角即可分享
微信分享提示