TDengine 是國內比較流的時序庫之一,支持群集並且免費,在.NET中資料比較少,這篇文章主要介紹SqlSugar ORM來操作TDengine 優點: 1、SqlSugar支持ADO.NET操作來實現TDengine,並且支持了常用的時間函數、支持聯表、分頁和批量插入和刪等操作 2、使用了原生 ...
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月份左右開發完成