使用sqlsugar时,select赋值不支持的格式处理方法

 1.不支持枚举转换,使用匿名对象转换完后,再使用Linq转为list实体

    .OrderBy((pr, prd, prc) => pr.ModifyTime, OrderByType.Desc).Select((pr, prd, prc) => new  //匿名对象
                {
                    RecordID = pr.RecordID,
                    TradeNo = pr.TradeNo,
                    TransactionID = pr.TransactionID,
                    Amount = pr.Amount,
                    BizType = pr.BizType,
                    CreateTime = pr.CreateTime,
                    RetriveCode = prd.RetriveCode,
                    ChannelCode = prd.ChannelCode,
                    CheckStatus = prc.CheckStatus,
                    CheckRemarks = prc.Remarks
                })
                .ToPageList(dto.PageIndex, dto.PageSize, ref totalNum).Select(it => new PaymentAgentDTO
                {
                    RecordID = it.RecordID,
                    TradeNo = it.TradeNo,
                    TransactionID = it.TransactionID,
                    Amount = it.Amount,
                    BizType = it.BizType?.ToEnum<TransactionType>(),
                    CreateTime = it.CreateTime,
                    RetriveCode = it.RetriveCode,
                    ChannelCode = it.ChannelCode,
                    CheckStatus = it.CheckStatus?.ToEnum<ReconciliationStatus>(),
                    CheckRemarks = it.CheckRemarks
                }).ToList();

2.对返回的结果额外处理:Mapper方法

     .OrderBy((pr, prd, prc) => pr.ModifyTime, OrderByType.Desc).Select((pr, prd, prc) => new PaymentAgentDTO
                {
                    RecordID = pr.RecordID,
                    TradeNo = pr.TradeNo,
                    TransactionID = pr.TransactionID,
                    Amount = pr.Amount,
                   // BizType = pr.BizType,
                    CreateTime = pr.CreateTime,
                    RetriveCode = prd.RetriveCode,
                    ChannelCode = prd.ChannelCode,
                    //CheckStatus = prc.CheckStatus,
                    CheckRemarks = prc.Remarks
                })
                .Mapper(it => new PaymentAgentDTO
                {
                    Amount = it.Amount+10,
                    CheckRemarks=it.CheckRemarks.PadLeft(10)
                })

3.这里主要是无法把数据库中查找的字段转换为枚举

在dto中我们还可以这样解决,定义字符串接收数据库中的枚举字段,再写一个Txt字段只有get接收强制转换的值

        /// <summary>
        /// 枚举
        /// </summary>
        public string CheckStatus { get; set; }
        /// <summary>
        /// 枚举说明:此自动转换,在netcore中可以通过修改json转换器全局修改
        /// </summary>
        public string CheckStatusText { get {
                   return CheckStatus?.ToEnum<CheckStatus >().GetDescription();
            } }

--------------------------扩展-----------

匿名对换转实体,或者匿名List转实体List如何转?

automapper已经去掉DynamicMap匿名映射的方法

------------------附枚举方法

//定义枚举 
public enum CheckStatus
{
							
				/// <summary>
				/// 已检查
				/// </summary>
				[Description("已检查")]
				[StringValue("check_yes")] 
				check_yes = 1,			
}
        /// <summary>
        /// 枚举字符串转换为对应的枚举对象(枚举code 转 枚举对象)
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="code">枚举Code</param>
        /// <returns></returns>
        public static T ToEnum<T>(this string code)
        {
            var enumObj = (T)System.Enum.Parse(typeof(T), code, true);
            return enumObj;
        }

 

//获取枚举自定义的描述说明        
public static string GetDescription(this Enum enumName)
        {
                string _description = string.Empty;
                FieldInfo _fieldInfo = enumName.GetType().GetField(enumName.ToString());
                DescriptionAttribute[] _attributes = _fieldInfo.GetDescriptAttr();
                if (_attributes != null && _attributes.Length > 0)
                    _description = _attributes[0].Description;
                else
                    _description = null;
                return _description;
        }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值