SqlSugar之SqlQueryDynamic返回值处理

本文介绍了如何在数据库表名每月变化的情况下,使用SqlSugar的SqlQueryDynamic查询动态类型,并通过Json转换为强类型对象,以避免手动添加映射类。在Oracle数据库环境下,通过拼接SQL和利用Json转换,实现了动态查询到强类型数据的便捷操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

现在有个需求,有一张表每个月表名都会变的,但结构是一样的,我们不能再用类映射来完成的,我不能每个月都去手动添加,我们只能使用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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值