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

Posted

技术标签:

【中文标题】将 lambda 表达式转换为 ORM 中的 SQL?【英文标题】:Convert lambda expressions to SQL in an ORM? 【发布时间】:2011-04-21 14:33:22 【问题描述】:

我如何编写将 LINQ 转换为 SQL 的 ORM?

我已经制作了一个现有的 ORM,但我想用 LINQ 对其进行改进,这样我就可以说:

MyORMObject.GetAll(o => o.firstName == "peter");

我脑海中的想法是系统会接受它并将其转换为查询。我想最难的部分是读取解析到 LINQ 部分的内容。

我该怎么做?换句话说,我将如何(通过反射或其他方式)读取正在使用的 FirstName 属性及其所需的匹配项“Peter”?

【问题讨论】:

【参考方案1】:

您将需要implement an IQueryable LINQ Provider。顺便说一句,您不会使用反射,而是使用 Expression 树。

【讨论】:

【参考方案2】:

如果你的方法是IEnumerable<T> GetAll<T>(Expression<Func<T,bool>>),那么 lambda 表达式将被编译为一个表达式树,带有一个 Equals 子表达式,它又具有一个包含 FirstName 属性的 MemberExpression 和一个 @ 987654325@ 包含字符串。

【讨论】:

以上是关于将 lambda 表达式转换为 ORM 中的 SQL?的主要内容,如果未能解决你的问题,请参考以下文章

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

轻量ORM-SqlRepoEx 重大升级

使用Lambda Stream 表达式,将 List<JavaBean> 转换为 List<Map>

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

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

如何将 SQL 转换为 lambda 表达式