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

前篇《https://www.cnblogs.com/ls0001/p/17437225.html》有大佬在评论里剧透了,这里就来一遍剧透。

  通常,前后端分离的系统要在前端查询数据是提交一个带着查询条件参数的表单,比如A=1,B=2,类似样,后端接收到表单需要将这些条件参数拼接成查询需要写代码,并且表单结构通常是不带查询逻辑属性的,只能用and来联接这些条件,给查询的灵活性带来了局限。

本框架就是要提供更灵活的,后端不需要写代码的一个查询能力。

其中一个主要的应用场景正是实现实现只需前端传递JSON格式的查询条件到后端,后端无需写查询代码就能进行查询。

其流程如下图所示:

举个例子:

前端提交来的查询JSON:

 { 
     "lg": "", "filters":
     [ 
        { 
            "lg": "", "Predicates": 
            [ { "lg": "", "Name": "id", "Op": ">", "Value": 1 } ]
        }, 
        { 
            "lg": "and", "Predicates": 
            [ { "lg": "", "Name": "id", "Op": "<", "Value": 10 } ] 
        },
        {
            "lg": "and",
            "Predicates":
            [
                {"lg": "","Name": "name",  "Op": "=", "Value": "MyName"},         
                {"lg": "or","Name": "name","Op": "=","Value": "HisName"}
            ]
        }
    ]
}

 

后端只要如下代码就可以了:

Query.Where(QueryFilterBuilder.CreateFilterExpression<Entity>(上面的JSON));
​

 

尽管前端JSON的构造也需要一个轮子,后续再说,本篇暂且先到这。

 

posted @ 2023-05-29 20:48  Tongze  阅读(431)  评论(3编辑  收藏  举报