SqlSugar之SqlQueryDynamic返回值处理

现在有个需求,有一张表每个月表名都会变的,但结构是一样的,我们不能再用类映射来完成的,我不能每个月都去手动添加,我们只能使用sql语句来完成这个需求。为了方便我这边选择的是SqlQueryDynamic返回dynamic类型来处理。dynamic是我们的动态类型,还是比较方便的。dynamic不能直接 as Objct,如果想那只能循环每个dynamic,然后进行属性赋值,这样太麻烦了。我们需要用json来进行过度,json相当于是我们的桥梁,dynamic——>强Class的桥梁。

环境:用的是Oracle数据库,其他是一样的。

①拼接我们的sql语句

           //根据需求拼接你的表名
                string tableName = $"T_YKP_POSITION{year}_{months}";
                //查询返回dynamic类型,因为是Oracle数据库,返回的列都是大写
                //特别注意:dynamic这里是数组
                dynamic dyList = dbOracle.Db.Ado.SqlQueryDynamic($@"
SELECT Id,Userid,Distance,Speed,Deviate,Gettime,Glng,Glat,Blng,Blat,Intervaltime,Itype,Createdate 
from  {tableName} where Gettime>=TO_DATE(TO_CHAR(sysdate,'yyyy-mm-dd'), 'yyyy-mm-dd,hh24:mi:ss') order by GETTIME 
            ");

②利用json进行转换

 //先把动态类型转json字符串
                string json = JsonConvert.SerializeObject(dyList);
                //json转强类型,TYkpPositionComm  是我们根据列创建的强类型用来接受的
                List<TYkpPositionComm> result = JsonConvert.DeserializeObject<List<TYkpPositionComm>>(json);
TYkpPositionComm类:
    public partial class TYkpPositionComm
    {
        public string ID { get; set; }
        public string USERID { get; set; }
        public decimal? DISTANCE { get; set; }
        public decimal? SPEED { get; set; }
        public decimal? DEVIATE { get; set; }
        public DateTime? GETTIME { get; set; }
        public decimal? GLNG { get; set; }
        public decimal? GLAT { get; set; }
        public decimal? BLNG { get; set; }
        public decimal? BLAT { get; set; }
        public decimal? INTERVALTIME { get; set; }
        public decimal? ITYPE { get; set; }
        public DateTime? CREATEDATE { get; set; }
    }

这样就可以了

原文地址:https://www.cnblogs.com/Sea1ee/p/10329120.html