gos*_*iwi 2 c# linq expression-trees
我正在处理一个小帮手,用于添加,编辑和从数据库中删除对象,add方法现在正在工作,给定一个类型为t的对象,它检查属性,值,并生成一个SQL查询以插入数据到表中(它假设表名是对象的类型,但也可以手动设置)
我现在想做的是一种方法
public bool Update<T>(T obj, Func<T, bool> predicate)
Run Code Online (Sandbox Code Playgroud)
因此给定一个T obj和一个lambda函数谓词,如果谓词是
(o => o.Id = 1)
Run Code Online (Sandbox Code Playgroud)
我想生成
WHERE Id = 1
Run Code Online (Sandbox Code Playgroud)
我已经看到了一些类似的问题,我认为表达式树可能是一个很好的起点,但我所看到的只是如何手动创建表达式,而不是如何从委托创建表达式.
有没有办法从委托生成SQL?
编辑:我终于可以做我想做的事了,我在这里发了一篇关于它的帖子.
您应该直接使用表达式:
public bool Update<T>(T obj, Expression<Func<T, bool>> predicate)
Run Code Online (Sandbox Code Playgroud)
你会以同样的方式调用它:
Update(obj, o => o.Id = 1);
Run Code Online (Sandbox Code Playgroud)
这将为您提供完整的表达式树,然后您可以将其解密并转换为SQL.编译器将从lambda构建表达式树,就像它与Func<T,bool>委托一样.
一旦有了表达式树,在您的情况下,您应该能够创建一个ExpressionVisitor来解析树,并找到要转换为WHERE Id = 1结果的所有Where语句.
| 归档时间: |
|
| 查看次数: |
621 次 |
| 最近记录: |