gpt4 book ai didi

entity-framework - System.Linq.Dynamic、EntitySQL 和表达式树之间的差异

转载 作者:行者123 更新时间:2023-12-04 07:25:05 26 4
gpt4 key购买 nike

我目前正在开发一个广泛使用 Entity Framework 的大型项目。我们实现的部分功能是基于用户提供的过滤器对各种数据模型进行动态查询(过滤/排序)。

为了实现这一点,我最终使用了 System.Linq.Dynamic这使我可以通过各种方式创建基于字符串的过滤器,例如 "SomeProperty.StartsWith(@P0)"等等,然后将这些字符串(和伴随参数)传递给 IQueryable<T> 的动态 Linq 扩展方法。 ( Where 等),以便对数据库执行它们并且每个人都很高兴。

I didn't know any other way to do this at the time except for a vague notion of Expression Trees and to be honest, I just could not get my head around them - I spent several weeks poring over a decompilation of a component that used expressions to implement dynamic querying and I balked :)

Plus it felt like I was reinventing the wheel when the functionality I needed effectively was already written by far cleverer people than myself, in the System.Linq.Dynamic extensions.



现在,当前的代码都可以很好地作为过滤、排序等的通用解决方案,在我的任何实体上运行,而且我对它很满意,但是随着我对 E.F 越来越熟悉,我开始遇到诸如
  • ObjectQuery
  • EntityClient
  • EntitySQL
  • Expression Trees

  • 我开始怀疑,鉴于 System.Linq.Dynamic快 6 岁了,在那段时间里没有真正做过任何事情,我错过了什么吗?或者,我是否错过了一些基本点?
  • 我是否应该咬紧牙关,将我的代码库移到使用 EntitySQL ? (我认为这就像 System.Linq.Dynamic 的精神继承者,还是我错了?)
  • 或者我应该回去学习如何使用Expression Trees因为他们是 future 的方式/所有很酷的 child 都这样做,等等?我不喜欢为了改变而改变,我喜欢有效的代码,但我担心在 future 的某个时候基于字符串的动态 linq 会变成死胡同,我一直在使用它。

  • 如果有人可以帮助澄清 System.Linq.Dynamic 之间的差异和 EntitySQL ,或者可以找出搬到 Expression Trees 的任何充分理由我真的很感激。

    最佳答案

    我们在我们的项目中广泛使用 Dynamic Linq ...
    它很干净并且运行良好,但是如果您想查看或更改其代码的任何内容,则它非常复杂。

    我使用 Dynamic Linq 和 EF 6 的组合发现的问题之一是
    EF 6 使用查询缓存来执行更快的数据检索和方式 哪里 Dynamic Linq 中内置的查询不使用 EF 6 的此功能。因此我们必须更改使用查询缓存的位置。

    这只是一个小例子,说明 Dynamic Linq 不适用于较新的 EF 版本。
    如果你想使用像 IQerable 这样的无类型集合,Dynamic Linq 是一个很好的解决方案,但它很难维护。

    我希望你能在类型化环境(IQueryable)中工作。否则基本上你需要修改 Dynamic Linq 才能真正利用 EF 6。

    关于entity-framework - System.Linq.Dynamic、EntitySQL 和表达式树之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20270288/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com