如何即时将 lambda 表达式转换为 Sql 查询?

Posted

技术标签:

【中文标题】如何即时将 lambda 表达式转换为 Sql 查询?【英文标题】:How to transform lambda expressions to Sql queries on the fly? 【发布时间】:2013-05-27 08:57:39 【问题描述】:

我有一个表达式类型变量。它有一个表达式来过滤数据。 例如,表达式让 SQL 获取 LOCATION 为 'KOR' 的数据。

it => (it.LOCATION == "KOR")

此表达式将是 SQL 语句中的 WHERE 子句。 将 lambda 表达式转换为 Sql 查询看起来很复杂,因为有许多不同的表达式。

如果不从头开始,我怎样才能达到这个目的? 有什么好的图书馆吗?

已添加....

我可以通过调用 ToString() 方法得到一个 lambda 表达式的字符串。

"it => (((it.LOCATION == \"KOR\") OrElse (it.LOCATION == \"FRA\")) AndAlso (it.Value > 30000))"

【问题讨论】:

SQL 查询的预期输出是什么? 预期输出是 WHERE LOCATION IN ('KOR', 'FRA') AND Value > 30000。 如果您正在寻找一个通用的解决方案,您可能会考虑构建一个导致嵌套谓词理论的 sql 子句树的复杂性。 NHibernate 或 Entity Framework 可以以不同的方式帮助您。 我将限制词汇表,而不是支持所有表达式,因此实现它不会太困难。感谢您的意见。 都是关于嵌套子句的。翻译一个 WHERE 并不难,但是你将如何处理 SELECT..FROM (SELECT..FROM..WHERE) INNER JOIN (SELECT..FROM) WHERE...AND...OR?谓词具有不同的优先级和不同的求解顺序。让我们知道:) 【参考方案1】:

我不完全确定您的要求,但您是否尝试过使用 Linq to Sql Dynamic Linq

【讨论】:

以上是关于如何即时将 lambda 表达式转换为 Sql 查询?的主要内容,如果未能解决你的问题,请参考以下文章

如何将带有内连接的 sql 查询转换为 linq lambda 表达式?

将带有连接的 SQL 查询转换为 lambda 表达式

将 lambda 表达式转换为 ORM 中的 SQL?

我将使用啥代码将类似 SQL 的表达式即时转换为正则表达式?

如何将 C# lambda 表达式转换为委托?

Lambda表达式转换为sql