使用 C# 的 SQL UPDATE 语句的 Lambda 表达式
是否可以使用库或代码从 lambda 表达式创建 SQL Update 语句?我们希望使用强类型 lambda 表达式来进行更新,而不是事先调用对象或使用字符串。我正在考虑这样的事情。
Update<Task>(
u => u.UserID = 1, u.TaskCount += 1, //Update
w => w.Priority != "High" && (w.Status != "Complete" || w.Status == null) //Where
);
这大致可以翻译为..
UPDATE Tasks SET UserID = 1, TaskCount = TaskCount + 1
WHERE Priority <> "High" AND (Status <> "Complete" OR Status = null)
我应该提到我们目前正在使用实体框架和 Postgres。
Is library or code available to create SQL Update statements from lambda expressions? We would like to use strongly-typed lambda expressions to do updates instead of calling the object before hand, or using strings. I'm thinking of something like this.
Update<Task>(
u => u.UserID = 1, u.TaskCount += 1, //Update
w => w.Priority != "High" && (w.Status != "Complete" || w.Status == null) //Where
);
Which would roughly translate to..
UPDATE Tasks SET UserID = 1, TaskCount = TaskCount + 1
WHERE Priority <> "High" AND (Status <> "Complete" OR Status = null)
I should mention we are currently using the Entity Framework and Postgres.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
我终于找到了一种方法来做到这一点。基本上,从实体框架、LINQ-to-SQL 或其他 ORM 获取生成的 SQL,然后解析 WHERE 子句。这样我就不必手动解析 lambda 了。然后从匿名类型创建 UPDATE 子句。结果如下:
这允许我更新/删除值,而无需先拉取它们。
它的代码看起来像这样......
I finally figured out a way to do this. Basically, get the generated SQL from the Entity Framework, LINQ-to-SQL, or another ORM, then parse the WHERE clause. That way I don't have to parse the lambda manually. Then create an UPDATE clause from an anonymous type. The result looks like:
This allows me to update/delete values WITHOUT pulling them first.
And the code for it looks like this...
您可以执行类似的操作,但是可以将哪些内容转换为 SQL 以及需要将哪些内容拉回到您的应用程序中。
您需要做的是为您的
Update
方法提供一个Action
(这是“更新”部分)和一个Expression
(作为“ where' 子句)。然后你可以用类似的方式调用你的更新
You can do something like this, but there will be limitations on what can be translated into SQL and what needs to be pulled back to your application.
What you need to do is give your
Update
method both anAction
(this is the 'update' part) and anExpression
(as the 'where' clause).Then you can call your Update with something like
对于那些喜欢扩展的人:
用法:
在 EF6 上测试
And for those who like Extensions:
Usage:
Tested on EF6
我发现这篇关于构建和执行“实体框架之上的 SQL 更新”的文章。也许它对你有用。
http://blogs.msdn.com/b/alexj/archive/2007/12/07/rolling-your-own-sql-update-on-top-of-the -entity-framework-part-1.aspx
I found this article about building and executing an "SQL update on-top of the Entity Framework". Maybe it's useful for you.
http://blogs.msdn.com/b/alexj/archive/2007/12/07/rolling-your-own-sql-update-on-top-of-the-entity-framework-part-1.aspx