select查询映射实体时候json属性映射失败。 返回

SqlSugar 沟通中
1 297
该叫什么 PA 发布于2026/2/24
悬赏:0 飞吻
            var express = db.Queryable<MainMsgEntity, UserMsgEntity>(innerJsonExpress.ToExpression()).AS<MainMsgEntity>(mainMsgTableName).AS<UserMsgEntity>(userMsgTableName);
            var msgObjList= express.OrderByDescending(m => m.Id)
                .Select((m, u) => new WSChatMsg
                {
                    MsgId = m.Id,
                    MsgType = m.MsgType,
                    ContentMediaType = m.ContentMediaType,
                    Content = m.Content,
                    RoomId = m.RoomId,
                    ReceiverUserId = u.UserId,
                    SendTime = m.SendTime,
                    IsReaded = u.IsReaded,
                    Status = m.Status
                }).Take(queryNumber).ToList();

WSChatMsg的结构如下:

    public class WSChatMsg
    {
        /// <summary>
        /// 原始的信息Id
        /// </summary>
        public long MsgId { get; set; }

        /// <summary>
        /// 信息类型
        /// </summary>
        public MsgTypeEnum MsgType { get; set; }

        /// <summary>
        /// 内容媒体类型 0,文字   1:图片,2:文件,3:视频
        /// </summary>
        public int ContentMediaType { get; set; } = 0;


        /// <summary>
        /// 聊天信息内容
        /// </summary>
        public WSChatMsgContent? Content { get; set; }


        /// <summary>
        /// 聊天室Id,信息为通知时候不需要配置
        /// </summary>
        public long RoomId { get; set; }

        /// <summary>
        /// 信息收件人
        /// </summary>
        public long ReceiverUserId { get; set; }

        /// <summary>
        /// 创建时间
        /// </summary>
        public DateTime SendTime { get; set; }

        /// <summary>
        /// 是否已读,这个属性不能放第一位和最后一位,redis需要根据属性替换
        /// </summary>
        public int? IsReaded { get; set; }

        /// <summary>
        /// 信息状态,1正常,0撤回,
        /// </summary>
        public int Status { get; set; } = 1;

    }

查询出来的 content属性为null,但是改为匿名对象,content就可以获取,我用下面的方式就可以正常。

      var express = db.Queryable<MainMsgEntity, UserMsgEntity>(innerJsonExpress.ToExpression()).AS<MainMsgEntity>(mainMsgTableName).AS<UserMsgEntity>(userMsgTableName);
      var msgObjList= express.OrderByDescending(m => m.Id)
          .Select((m, u) => new 
          {
              MsgId = m.Id,
              MsgType = m.MsgType,
              ContentMediaType = m.ContentMediaType,
              Content = m.Content,
              RoomId = m.RoomId,
              ReceiverUserId = u.UserId,
              SendTime = m.SendTime,
              IsReaded = u.IsReaded,
              Status = m.Status
          }).Take(queryNumber).ToList();
      //先映射为匿名对象,再通过Mapster转一次
      var msgList = msgObjList.AddMaps<List<WSChatMsg>>().ToList();

需要通过  var msgList = msgObjList.AddMaps<List<WSChatMsg>>().ToList(); 多转换一次才正常。

麻烦版主测试一下,用的是最新的 5.1.4.214版本

热忱回答1