将 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?的主要内容,如果未能解决你的问题,请参考以下文章