基于Expression Lambda表达式树的通用复杂动态查询构建器——《构思篇一》
2023/5/25 11:22:20
本文主要是介绍基于Expression Lambda表达式树的通用复杂动态查询构建器——《构思篇一》,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
Id>1 and Id<10
如上所示,有两个独立的条件分别为Id>1
和 Id<10
,用一个逻辑操作符 and
连接起来。
再看下面这条,后面也是两个独立条件通过操作符or
连接,并包在括号里,作为一个整体。
Id>1 and Id<10 and (Name="MyName" or Name="HisName")
可以看到当中包含几种元素:字段名称,逻辑操作符,比较操作符,条件值,数据类型,括号。两个概念:独立的条件和由括号包将它们起来的整体。
那么可以设计两个类来代表独立条件和条件组,如下所示:
//独立条件伪代码: public class Field { public enum Logical {get;set;} //与其它条件之间的逻辑关系 public enum comparer {get;set;} //条件比较符 public Type DataType {get;set;} //数据类型 public string FieldName {get;set;} //字段名称 public object QueryValue {get;set;} //条件值 }
由于复杂的查询的括号是可嵌套的,多重组合的,类似下面的还算简单的子句:
(dept="mgr" or dept ="bi" ) and(Id>1 and Id<10 and (Name="MyName" or Name="HisName"))
那么条件组里就需要包含独立条件和条件组,并且可嵌套,即组中有组:
//条件组伪代码: public class Block { public enum Logical {get;set;} //与其它条件组或独立条件之间的逻辑关系 public List<Field> Fields {get;} public List<Block> Blocks {get;} }
光文字看得似乎容易蒙逼,来张图或者能辅助理解(图示仅用来说明分组的层次):
-
至此,把查询条件用代码描述出来的构思就暂告一段落了。
-
这篇关于基于Expression Lambda表达式树的通用复杂动态查询构建器——《构思篇一》的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-22[开源]10.3K+ Star!轻量强大的开源运维平台,超赞!
- 2024-11-21Flutter基础教程:新手入门指南
- 2024-11-21Flutter跨平台教程:新手入门详解
- 2024-11-21Flutter跨平台教程:新手入门与实践指南
- 2024-11-21Flutter列表组件教程:初学者指南
- 2024-11-21Flutter列表组件教程:新手入门指南
- 2024-11-21Flutter入门教程:初学者必看指南
- 2024-11-21Flutter入门教程:从零开始的Flutter开发指南
- 2024-11-21Flutter升级教程:新手必读的升级指南
- 2024-11-21Flutter升级教程:轻松掌握Flutter版本更新