我目前正在开展一个广泛使用实体框架的大型项目。我们实现的部分功能是基于用户提供的过滤器对各种数据模型进行动态查询(过滤器/排序)。
为了实现这一点,我最终使用System.Linq.Dynamic
which 允许我通过各种方式创建基于字符串的过滤器,例如 like 等"SomeProperty.StartsWith(@P0)"
,然后将这些字符串(和伴随的参数)传递给IQueryable<T>
(Where
等) 的 Dynamic Linq 扩展方法,以便他们对数据库执行,每个人都很高兴。
当时我不知道任何其他方法可以做到这一点,除了表达树的模糊概念,老实说,我无法理解它们 - 我花了几个星期仔细研究使用的组件的反编译实现动态查询的表达式,我犹豫了:)
另外,当我有效需要的功能已经由比我聪明得多的人在
System.Linq.Dynamic
扩展中编写时,感觉就像我在重新发明轮子。
现在,当前代码在我的任何实体上都可以很好地用作过滤、排序等的通用解决方案,我对此感到很满意,但是随着我对 EF 越来越熟悉,我开始遇到类似的事情
我开始怀疑,考虑到它System.Linq.Dynamic
已经快 6 岁了,在那段时间里还没有真正做任何事情,我错过了什么吗?或者,我错过了一些基本点吗?
我应该硬着头皮把我的代码库移过来使用
EntitySQL
吗?(我认为这就像 的精神继承者System.Linq.Dynamic
,还是我错了?)或者我应该回去学习如何使用
Expression Trees
,因为它们是未来的方式/所有酷孩子都这样做,等等?我不喜欢为了改变而改变,我喜欢有效的代码,但我担心在未来的某个时候,基于字符串的动态 linq 会成为死胡同,我会一直使用它。
如果有人可以帮助澄清 和 之间的区别System.Linq.Dynamic
,EntitySQL
或者可以找出任何充分的理由来移动,Expression Trees
我将非常感激。