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

发布于 2024-11-02 10:28:35 字数 285 浏览 1 评论 0 原文

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

我已经创建了一个现有的 ORM,但我想用 LINQ 改进它,这样我就可以说:

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

我脑子里的想法是系统将把它转换成查询。我想最困难的部分是读取解析到 LINQ 部分的内容。

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

How could I write an ORM that would convert LINQ into SQL?

I already have made an existing ORM, but I want to improve it with LINQ, so that I, for instance would be able to say:

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

The idea in my head is that the system would then take that and convert it into a query. I guess the hard part is to read the stuff parsed into the LINQ part.

How do I do this? In other words, how would I (through Reflection or something else) read the FirstName property being used, and its desired match, "Peter"?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

吻风 2024-11-09 10:28:35

您将需要实现 IQueryable LINQ提供者。顺便说一下,您不会使用反射,您将使用 表达式树。

You are going to need to implement an IQueryable LINQ Provider. You won't be using reflection by the way, you'll be using Expression trees.

萌逼全场 2024-11-09 10:28:35

如果您的方法是 IEnumerable; GetAll(Expression>),则 lambda 表达式将被编译为表达式树,并带有 Equals 子表达式,该子表达式又有一个包含 FirstName 属性的 MemberExpression 和一个包含字符串的 ConstantExpression

If your method is IEnumerable<T> GetAll<T>(Expression<Func<T,bool>>), then the lambda expression will be compiled as an expression tree, with an Equals sub-expression, which in turn has a MemberExpression containing the FirstName property, and a ConstantExpression containing the string.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文