KingbaseES 模糊查找

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了KingbaseES 模糊查找相关的知识,希望对你有一定的参考价值。

表中“姓名”列有
张三
张四
李四
张五
李五
王四
想找出“张四、李四”

按照SQL可以用 select * from 姓名 where name like '[张李]四'
但在KingbaseES数据库中根本找不到,如何解决啊?

create table #temp
(
name varchar(20)
)
insert into #temp
select \'张三\'
insert into #temp
select \'张四\'
insert into #temp
select \'李四\'
insert into #temp
select \'张五\'
insert into #temp
select \'李五\'
insert into #temp
select \'王四\'

select * from #temp where name like \'[张李]四\'

我这样是可以找到的了
参考技术A select * from 姓名 where name like '[张李]四' 在SQLServer中是没问题的。没试过KingBaseES.

Efcore对接金仓数据库KingbaseES

什么是KingbaseES

人大金仓数据库管理系统KingbaseES(简称:金仓数据库或KingbaseES)是北京人大金仓信息技术股份有限公司在国家“863”计划数据库重大专项和北京市科技计划重大项目支持下研发成功的具有自主知识产权的国产大型通用数据库管理系统(DBMS)。系统具有完整的大型通用数据库管理系统特征,提供完备的数据库管理功能,支持1000个以上并发用户、TB级数据量、GB级大对象。系统可运行于Windows、Linux、麒麟以及UNIX等多种操作系统平台,具有标准通用、稳定高效、安全可靠、兼容易用等特点。

什么是EF Core

Entity Framework Core (EF Core) 是在 2016 年首次发布的 EF6的完全重写。它附带于 Nuget包中,是 Microsoft.EntityFrameworkCore 的主要组成部分。EF Core 是一种跨平台产品,可以在 .NET Core 或 .NET Framework 上运行。

EF Core支持多个数据库引擎,包括KingbaseES。为了支持EF core,KingbaseES提供了Kdbndp.EntityFrameworkCore.KingbaseES。

代码集成

1、下载官方的驱动

2、项目中对dll进行引用

3、在Services进行上下文注入

builder.Services.AddDbContext<WpsLogContext>(
       options => options.EnableSensitiveDataLogging(true).UseLoggerFactory(MyLoggerFactory).UseKdbndp(builder.Configuration.GetSection("ConnectionStrings:wpslogDefaultConnection").Value));

4、对数据库访问进行封装

/// <summary>
        /// 添加
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        public bool Add(T entity)
        
            context.Set<T>().Add(entity);
            return context.SaveChanges() > 0;
        

        /// <summary>
        /// 删除
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        public bool Delete(T entity)
        
            context.Set<T>().Remove(entity);
            return context.SaveChanges() > 0;
        

        /// <summary>
        /// 根据主键查询
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public T Find(int id)
        
            return context.Set<T>().Find(id);
        

        /// <summary>
        /// 更新
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        public bool Update(T entity)
        
            var entry = context.Entry(entity);
            entry.State = EntityState.Modified;
            //如果数据没有发生变化
            if (!this.context.ChangeTracker.HasChanges())
            
                return false;
            
            return context.SaveChanges() > 0;
        

        /// <summary>
        /// 查询
        /// </summary>
        /// <returns></returns>
        public IQueryable<T> Query()
        
            return context.Set<T>();
        

        /// <summary>
        /// 查询且不被上下文所跟踪
        /// </summary>
        /// <returns></returns>
        public IQueryable<T> QueryAsNoTracking()
        
            return context.Set<T>().AsNoTracking();
        

        public int Update(Expression<Func<T, bool>> whereLambda, Expression<Func<T, T>> entity)
        
            throw new Exception();
            //return context.Set<T>().Where(whereLambda).Update(entity);
        

        public int Delete(Expression<Func<T, bool>> whereLambda)
        
            throw new Exception();
            //return context.Set<T>().Where(whereLambda).Delete();
        

        public bool IsExist(Expression<Func<T, bool>> whereLambda)
        
            return context.Set<T>().Any(whereLambda);
        

        public T GetEntity(Expression<Func<T, bool>> whereLambda)
        
            return context.Set<T>().AsNoTracking().FirstOrDefault(whereLambda);
        

        public Tuple<List<T>, int> Select<S>(int pageSize, int pageIndex, Expression<Func<T, bool>> whereLambda, Expression<Func<T, S>> orderByLambda, bool isAsc)
        
            var total = context.Set<T>().Where(whereLambda).Count();

            if (isAsc)
            
                var entities = context.Set<T>().Where(whereLambda)
                                      .OrderBy<T, S>(orderByLambda)
                                      .Skip(pageSize * (pageIndex - 1))
                                      .Take(pageSize).ToList();

                return new Tuple<List<T>, int>(entities, total);
            
            else
            
                var entities = context.Set<T>().Where(whereLambda)
                                      .OrderByDescending<T, S>(orderByLambda)
                                      .Skip(pageSize * (pageIndex - 1))
                                      .Take(pageSize).ToList();

                return new Tuple<List<T>, int>(entities, total);
            
        

        public virtual void Dispose()
        
            if (context != null)
            
                context.Dispose();
            
        

至此,接入完成,当然中间有些坑,需要自己去研究,这边就不详细描述了。

以上是关于KingbaseES 模糊查找的主要内容,如果未能解决你的问题,请参考以下文章

Linux 上 学习使用 KingbaseES数据库 (postgresql 版)

Linux 上 学习使用 KingbaseES数据库 (postgresql 版)

Linux安装KingbaseES数据库 Unsupported major.minor version错误处理

猿创征文 | 国产数据库之人大金仓数据库详解安装和使用

安装KingbaseES数据库

干货丨KingbaseES中的RPC介绍