我正在将一个旧应用程序从 WebForms 移植到 MVC,并且该过程的一部分是拆除现有的数据层,将逻辑从存储过程转移到代码中。因为我最初只使用基本的 C# SQL 函数 (System.Data.SqlClient),所以我使用了一个轻量级的伪 ORM ( PetaPoco ),它只将一条 SQL 语句作为一个字符串并执行它。构建动态查询在 SQL 中的工作方式大致相同 - 大量添加和删除附加代码的条件(平均查询有大约 30 个过滤器)。
所以看了一圈之后,我找到了一些选择:
- 一堆字符串和条件,根据需要添加查询的位。真的很讨厌,尤其是当查询变得复杂时,如果存在更好的解决方案,这不是我想要追求的。
- 一堆使用 L2E 的条件句。看起来更优雅,但我测试过 L2E 实在是太臃肿了,总体来说是一种糟糕的体验。我可以在 L2S 中做同样的事情吗?如果是这样,L2S 会在未来 5-10 年内持续存在吗?
- 使用PredicateBuilder。仍在研究这个,关于 L2S 的相同问题。
- 编辑:我也可以坚持现有的存储过程模型,但无论如何我都必须重写它们,所以看看其他选项不会有什么坏处,因为我仍然需要做腿部工作。
还有其他选择吗?任何人都可以对上述任何一种方法有一些经验吗?主要是,您选择的方法是否让您想要构建一台时间机器并为实现它而杀了你?