首页 > 其他分享 >基于Expression Lambda表达式树的通用复杂动态查询构建器——《构思篇一》

基于Expression Lambda表达式树的通用复杂动态查询构建器——《构思篇一》

时间:2023-05-25 09:13:26浏览次数:48  
标签:set get public 条件 查询 Expression Id 表达式 Lambda

上一篇中构思了把查询子句描述出来的数据结构,那么能否用代码将其表达出来,如何表达呢?

再次回顾考察,看下面的查询子句:

Id>1 and Id<10

如上所示,有两个独立的条件分别为Id>1Id<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;}
}

 

光文字看得似乎容易蒙逼,来张图或者能辅助理解(图示仅用来说明分组的层次):

  • 至此,把查询条件用代码描述出来的构思就暂告一段落了。

  • 欲了解更多,挖掘更多,敬待下期分解。

  • 随手点个赞呗!
  • 下集预告。。。。。如何得到目标表达式

 

标签:set,get,public,条件,查询,Expression,Id,表达式,Lambda
From: https://www.cnblogs.com/ls0001/p/17430038.html

相关文章

  • 正则表达式匹配最后一部分
    今天,同事问了我一个正则,最后解决了,给大家提供一下参考。用于取网址的最后一部分。本文用于讲解(?=和?<=和?>=和?!的用法)数据如下:https://download.microsoft.com/download/5/3/8/5388ECC4-C2E2-4D40-8C21-D1EA26FEA0CA/msodll40ui2016-kb4018324-fullfile-x86-glb.exehttps://......
  • 关于PHP正则表达式这回事
    ......
  • 表达式语言引擎:Apache Commons JEXL 2.1 发布
    CommonsJEXL2.1发布了,该版本和2.0.1是二进制兼容的,但源码不兼容,因为新增了两个接口:org.apache.commons.jexl2.Scriptorg.apache.commons.jexl2.JexlInfoJEXL2.1改进内容:Amorethorougharithmetic(JexlArithmetic)thatallowsfinecontroloverdecimals(scaleand......
  • 正则表达式详解
    一、正则表达式概述正则表达式是一组由字母和符号组成的特殊文本,它可以用来从文本中找出满足你想要的格式的句子。通俗的讲就是按照某种规则去匹配符合条件的字符串一个正则表达式是一种从左到右匹配主体字符串的模式。“Regularexpression”这个词比较拗口,我们常使用缩写......
  • 正则表达式
    符号解释示例说明.匹配任意字符b.t可以匹配bat/but/b#t/b1t等\w匹配字母/数字/下划线b\wt可以匹配bat/b1t/b_t等但不能匹配b#t\s匹配空白字符(包括\r、\n、\t等)love\syou可以匹配loveyou\d匹配数字\d\d可以匹配01/23/99等\b匹配单词......
  • 正则表达式
    什么是正则?正则就是:定义字符串出现规则的表达式。何时使用?字符串的切割、替换、验证以及Python爬虫时。JS中如何使用正则?语法:varreg=/正则规则/;一、正则的基础1、限定符?限定符表示?前面的一个字符可以出现0次或1次。r如:ab?c,意思是匹配出现0次b或者1次b的字符串。*限定符......
  • 正则表达式
    1.\将下一个字符标记符、或一个向后引用、或一个八进制转义符。例如,“\\n”匹配\n。“\n”匹配换行符。序列“\\”匹配“\”而“\(”则匹配“(”。即相当于多种编程语言中都有的“转义字符”的概念。2^匹配输入字行首。如果设置了RegExp对象的Multiline属性,^也匹配“......
  • 代码随想录算法训练营第11天 | ● 20. 有效的括号 ● 1047. 删除字符串中的所有相邻重
     第五章 栈与队列part02今日内容:  ●  20. 有效的括号●  1047. 删除字符串中的所有相邻重复项●  150. 逆波兰表达式求值  详细布置   20. 有效的括号  讲完了栈实现队列,队列实现栈,接下来就是栈的经典应用了。  大家先自己思考一下 有......
  • Linux三剑客(grep/awk/sed)及正则表达式
    Linux给人的印象是黑乎乎的神秘窗口,文本操作和数据处理似乎没有Windows窗口界面直观方便。其实Linux有自己的独特的法宝,称之为三剑客:grep,awk和sed。你可以用这三件法宝很方便的处理数据:查找,分段,修改。正则表达式要想对文本和数据进行操作,一定离不开正则表达式,本文首......
  • 正则表达式的意义
    https://www.bilibili.com/video/BV1CS4y1C7ZY?p=60&spm_id_from=pageDriver&vd_source=29cb78abf51970a872824d0975a7bff5处理大量的字符串处理文字通过特殊符号的辅助,可以让linux管理员快速过滤、替换、处理所需要的字符串、文本,让工作高效。通常Linux运维工作,都是面临大......