为了简化查询表达式的动态构建,社区出现了很多表达式生成辅助库。其中最知名当属
System.Linq.Dynamic.Core和
LinqKit。
System.Linq.Dynamic.Core使用字符串定义表达式,并在内部转换成
Expression,
LinqKit则是使用
PredicateBuilder<T>把复杂表达式拆分成多个片段的组合。但是他们也存在一些不便之处,
System.Linq.Dynamic.Core牺牲了代码的静态检查能力,只有在运行时才知道表达式是否正确。如果把表达式作为允许前端填写的参数,不仅需要让前端开发人员多学习一套表达式定义语法,还会产生安全漏洞。如果想提前检查表达式的安全性,就需要对字符串进行分析。分析字符串生成表达式会成为一个流行库的原因之一就是分析这个字符串很难,这样一来相当于把外包出去的困难任务又拿回来了。
LinqKit则是对前端不友好,这种类型无法序列化传输,如果想通过前端配合使用,还是需要再想办法写一套转换代码和配套的可序列化数据结构。
如何在 .NET 中构建一个好用的动态查询生成器
未经允许不得转载:小狮博客 » 如何在 .NET 中构建一个好用的动态查询生成器
小狮博客