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