Oracle Union后分页,报异常,C#代码见内容 返回

求助
16 231
该叫什么 言白 发布于2周前
悬赏:5 飞吻

代码:

  await queryClient.UnionAll<SysUser>(queryClient.Queryable<SysUser>(), queryClient.Queryable<SysUser>()).Take(2).ToListAsync()

热忱回答16

  • 提供实体类结构

    0 回复
  • @fate stay night

        /// <summary>

        /// 用户实体

        /// </summary>

        [SugarTable("SYS_USER")]

        [MongoCollection(CollectionName = "SYS_USER")]

        public class SysUser : Entity<long>

        {

            /// <summary>

            /// 账号

            /// </summary>

            public string UserName { get; set; }


            /// <summary>

            /// 姓名

            /// </summary>

            public string RealName { get; set; }


            /// <summary>

            /// 密码

            /// </summary>

            public string PWD { get; set; }


            /// <summary>

            /// 手机号

            /// </summary>

            public string MobilePhone { get; set; }


            /// <summary>

            /// 证件类型

            /// </summary>

            public short IDType { get; set; }


            /// <summary>

            /// 证件号码

            /// </summary>

            public string IDNumber { get; set; }


            /// <summary>

            /// 组织Id

            /// </summary>

            public long OrgId { get; set; }


            /// <summary>

            /// 激活状态

            /// </summary>

            public short IsActive { get; set; }


            /// <summary>

            /// 备注

            /// </summary>

            public string Remarks { get; set; }

            /// <summary>

            /// 允许删除

            /// </summary>

            public short AllowDeletion { get; set; }

        }

    打印SQL脚本:

    SELECT *

      FROM (SELECT *, ROW_NUMBER() OVER(ORDER BY sysdate) AS RowIndex

              FROM (SELECT "USERNAME",

                           "REALNAME",

                           "PWD",

                           "MOBILEPHONE",

                           "IDTYPE",

                           "IDNUMBER",

                           "ORGID",

                           "ISACTIVE",

                           "REMARKS",

                           "ALLOWDELETION",

                           "ISDELETED",

                           "MODIFIED",

                           "MODIFIERID",

                           "MODIFIER",

                           "ID",

                           "CREATED",

                           "CREATORID",

                           "CREATOR"

                      FROM "SYS_USER"

                    UNION ALL

                    SELECT "USERNAME",

                           "REALNAME",

                           "PWD",

                           "MOBILEPHONE",

                           "IDTYPE",

                           "IDNUMBER",

                           "ORGID",

                           "ISACTIVE",

                           "REMARKS",

                           "ALLOWDELETION",

                           "ISDELETED",

                           "MODIFIED",

                           "MODIFIERID",

                           "MODIFIER",

                           "ID",

                           "CREATED",

                           "CREATORID",

                           "CREATOR"

                      FROM "SYS_USER") unionTable) T

     WHERE RowIndex BETWEEN 1 AND 2

    脚本在这块报错

    SELECT *

      FROM (SELECT *, ROW_NUMBER() OVER(ORDER BY sysdate) AS RowIndex

    修改为

    SELECT *

      FROM (SELECT unionTable.*, ROW_NUMBER() OVER(ORDER BY sysdate) AS RowIndex

    就不存在问题了


    0 回复
  • @言白:可以重现,今天发布

    0 回复
  • 你先用替代方案 .Select("unionTable.*")

    0 回复
  • @fate stay night:谢谢

    0 回复
  • 你的代码真难看 , 来我教你一招 

    image.png

    看到代码语言那一览了吧 ? 没错在那里 ~~ ! 我也找了好久. 

    0 回复
  • @Aaron 傲:谢谢指教

    0 回复
  • @fate stay night:还有个问题需要请教

    Union和SqlFunc.Contains组合使用时,也会存在异常

    源码:

    string userName = "Test";
    var aa = await queryClient.UnionAll<SysUser>
      (queryClient.Queryable<SysUser>().WhereIF(!string.IsNullOrWhiteSpace(userName), u => SqlFunc.Contains(u.UserName,userName))
      ,queryClient.Queryable<SysUser>().WhereIF(!string.IsNullOrWhiteSpace(userName), u => SqlFunc.Contains(u.UserName, userName))).ToListAsync();

    跟踪脚本,应该时参数名不匹配

    0 回复
  • @言白:下面修复

    0 回复
  • @fate stay night:亲,5.0.0.19  Union和SqlFunc.Contains组合使用时,也会存在异常  该问题没有修复吧?

    0 回复
  • @言白:马上发布

    0 回复
  • @fate stay night亲,5.0.0.22 版本验证了,Union和SqlFunc.Contains组合使用问题没有修复

    0 回复
  • @言白:什么数据库,还有你的代码发出来

    0 回复
  • string userName = "Test";
    var aa = await queryClient.UnionAll<SysUser>
      (queryClient.Queryable<SysUser>().WhereIF(!string.IsNullOrWhiteSpace(userName), u => SqlFunc.Contains(u.UserName,userName))
      ,queryClient.Queryable<SysUser>().WhereIF(!string.IsNullOrWhiteSpace(userName), u => SqlFunc.Contains(u.UserName, userName))).ToListAsync();

    数据库是Oracle

    0 回复
  • @言白:下个版本修复

    0 回复
  • @言白:GITHUB源码已更新 ,NUGET需要等一些时间才更新

    0 回复

版块

学习文档

最新会员

发布达人

回贴达人