【菜鸟看框架】——Linq实现动态模糊查询

简介: 【菜鸟看框架】——Linq实现动态模糊查询

引言


在上一篇博客中我给大家介绍了我们怎样用EF自动生成实体,当我们生成实体后就需要面向实体来操作,而不再是针对数据库中的表,这就需要一种新的知识——Linq,利用Linq实现简单的增、删、改、查在这篇博客中就不给大家介绍了,在这主要是给大家介绍怎样用Linq实现动态模糊查询。


 

业务需求


首先现在给大家看一个查询的界面:


20150608191557770.jpg这个查询界面实现的功能就是,当我们在检索类型的时候选择了正题名(书名),然后在选择检索模式的时候,选择了任意匹配。那么当我们在编码的时候其实就是这样想的,首先我们查询的表中的字段是动态的(根据我选择的检索类型来判断),并且在对字段查询的时候是一种模糊查询(只要这个字段中包含这个查询内容就可以,不一定完全一样)。其实这个东西和我们在机房收费系统中的组合查询类似,但是如果我们利用那种方法来实现,我相信那些繁琐的SQL语句肯定让我们恶心的要死,下面就给大家分享一种Linq实现的办法(用了一天的时间摸索出来的)。


第一 下载Dynamic.cs文件 c#版   VB.net版


第二 复制Dynamic.cs文件到项目下解压下载好的文件得到——CSharpSamples文件夹,然后在LinqSamples——》DynamicQuery-—》DynamicQuery,里面找到Dynamic.cs并将其复制到你的项目下面。


第三 在项目中引用using System.Linq.Dynamic;


其实这个Dynamic.cs(2000多行代码)文件是微软给我写好的一个类文件,其中就是对Linq语句中where()方法进行了重写,重写的目的就是我们的条件不再是以前的那么死板,而是成为了字符串,这样我们就可以根据需求自己来编写合理的字符串来查询,从而实现了字段动态的模糊查询。下面来对比分析一下这类文件的使用。


简单的查询代码:


  public List<Model.WorkLog> QueryStuffNum(WorkLog enWorkLog)
        {
            //根据它在WorkLog表中的教工号查出其对应的所有的工作记录。
            var temp = from c in dbContext.WorkLog
                       where c.staffNum == enWorkLog.staffNum
                       select c;
            return temp.ToList();
        }


这样我们针对一般的查询就可以用这个简单的Linq查询语句来实现,但是我们可以看

到我们的字段是一定的,也就是不能根据U层的需求来动态的选择字段。模糊查询代码:

 

U层代码如下:

 

           string filedName = "";
            string valueTwo = "";
            switch (strQuery)
            {
                case ("教工号"):
                    filedName = "staffNum=@0 && isAvaliable=@1";
                    break;
                case ("姓名"):
                    filedName = "name=@0 && isAvaliable=@1";
                    break;
                case ("学院"):
                    filedName = "school=@0 && isAvaliable=@1";
                    break;
                case ("电话"):
                    filedName = "phone=@0 && isAvaliable=@1";
                    break;
                case ("邮箱"):
                    filedName = "email=@0 && isAvaliable=@1";
                    break;
                case ("级别"):
                    filedName = "levelID=@0 && isAvaliable=@1";
            Context.Items["fileName"] = filedName;
            Context.Items["value"] = strSearch;
            valueTwo = "True";
            //定义Tteacher来保存查询到的信息
            List<Administrator> Tteacher = new List<Administrator>();
            Tteacher = administratorBll.QueryAdministrator(filedName, strSearch, valueTwo);

D层代码如下:

  public List<Model.Administrator> QueryAdministrator(string fileName, string value, string valueTwo)
        {
            //当用户选择某一种查询方式的时候,用到的实体字段是不一样的,
            var administrator = dbContext.Administrator.Where(fileName, value, valueTwo);
            return administrator.ToList();
        }

通过上面的对比我们发现,其实微软写的这个库文件就是对where()的一个重写,让我们将查询条件可以以字符串的形式来展现。


小结


在刚遇到这个问题的时候一点思路都没有,尤其是对linq非常不熟悉的情况下,于是在网上查找了一些资料,但是没有什么大的帮助,尤其是很多都是全英的资料对于我们这种英语水平的人来说实在是太痛苦了,和师哥师姐也交流过,但是他们好像都没有遇到过这种需求,所以也没有提供一种非常明确的思路,但是这个项目中是非常重要的功能,所以硬着头皮借助百度翻译继续查找资料,最后利用上面的方法解决了这个难题,希望能给广大读者一些帮助。

目录
相关文章
|
8月前
|
机器学习/深度学习 人工智能 机器人
阿里通义开源推理模型新王者!QwQ-32B:性能直逼671B的DeepSeek-R1
QwQ-32B 是阿里巴巴开源的新型推理模型,基于强化学习训练,具备强大的数学推理和编程能力,性能媲美更大参数量的模型。
825 8
阿里通义开源推理模型新王者!QwQ-32B:性能直逼671B的DeepSeek-R1
|
缓存 监控 关系型数据库
如何优化MySQL查询速度?
如何优化MySQL查询速度?【10月更文挑战第31天】
508 3
|
机器学习/深度学习 人工智能 监控
利用AI进行代码审查:提升代码质量和开发效率
【10月更文挑战第12天】本文探讨了AI在代码审查中的应用及其优势,介绍了AI辅助代码审查工具如何通过自动化和持续学习提升代码质量和开发效率。文章还提供了实施AI辅助代码审查的具体步骤和实战技巧,帮助团队更好地利用这些工具。
|
Kubernetes Ubuntu NoSQL
harbor镜像仓库自建
harbor镜像仓库自建
|
机器学习/深度学习 存储 自然语言处理
从理论到实践:如何使用长短期记忆网络(LSTM)改善自然语言处理任务
【10月更文挑战第7天】随着深度学习技术的发展,循环神经网络(RNNs)及其变体,特别是长短期记忆网络(LSTMs),已经成为处理序列数据的强大工具。在自然语言处理(NLP)领域,LSTM因其能够捕捉文本中的长期依赖关系而变得尤为重要。本文将介绍LSTM的基本原理,并通过具体的代码示例来展示如何在实际的NLP任务中应用LSTM。
1127 4
|
容器 C# Docker
WPF与容器技术的碰撞:手把手教你Docker化WPF应用,实现跨环境一致性的开发与部署
【8月更文挑战第31天】容器技术简化了软件开发、测试和部署流程,尤其对Windows Presentation Foundation(WPF)应用程序而言,利用Docker能显著提升其可移植性和可维护性。本文通过具体示例代码,详细介绍了如何将WPF应用Docker化的过程,包括创建Dockerfile及构建和运行Docker镜像的步骤。借助容器技术,WPF应用能在任何支持Docker的环境下一致运行,极大地提升了开发效率和部署灵活性。
649 1
|
开发者 Windows Android开发
跨平台开发新选择:揭秘Uno Platform与.NET MAUI优劣对比,帮你找到最适合的框架,告别选择困难症!
【8月更文挑战第31天】本文对比了备受关注的跨平台开发框架Uno Platform与.NET MAUI的特点、优势及适用场景。Uno Platform基于WebAssembly和WebGL技术,支持Windows、iOS、Android及Web平台,而.NET MAUI由微软推出,旨在统一多种UI框架,支持Windows、iOS和Android。两者均采用C#和XAML进行开发,但在性能、平台支持及社区生态方面存在差异。Uno Platform在Web应用方面表现出色,但性能略逊于原生应用;.NET MAUI则接近原生性能,但不支持Web平台。开发者应根据具体需求选择合适的框架。
584 0
|
网络安全 数据安全/隐私保护 Windows
freeSSHd工具安装使用
【5月更文挑战第21天】freeSSHd工具安装使用
2935 2
|
SQL Oracle 容灾
达梦数据库和orcale数据库有何区别
达梦数据库和orcale数据库有何区别
1571 1