ExpressionVisitor解析表达式树的问题

Eason0807 2019-12-16 07:34:29
假设有这么一个表达式目录树
Expression<Func<Customer, bool>> expression1 = c => (c.Id > 5 && c.Name.Contains("asdd")) ||( c.Id==1 || c.Id==2);


现在表达式c.Id > 5 ,c.Name.Contains("asdd")这一类的已经解析出来了没啥问题

关键是怎么能把圆括括号"()"也解析出来,否则这种多条件的,表达不出来原来的意思啊
...全文
37 点赞 收藏 8
写回复
8 条回复
Eason0807 2019年12月17日
引用 7 楼 github_36000833 的回复:
[quote=引用 1 楼 github_36000833 的回复:] 表达式树不是已经给你结构了吗? 比如: 二目表达式OrElse, 左边是:(c.Id > 5 && c.Name.Contains("asdd")) 右边是:(c.Id==1 || c.Id==2) 可以看到括号的作用已经反映到表达式里了。
二目表达式OrElse,----> 对应 SQL OR 左边 ---> 对应 假设 L 右边 ---> 对应 假设 R SQL不就是 (L) OR (R) 把L和R扩展开,不就是你要的结果:((Id > 5) AND (Name like '%asdd%')) OR ((Id = 1) OR (Id = 2)) [/quote] 我明白你的意思了,谢谢!我开始想的有偏差,我以为也能像取其他部分一样重写方法就能取到括号呢
回复 点赞
github_36000833 2019年12月17日
引用 1 楼 github_36000833 的回复:
表达式树不是已经给你结构了吗? 比如: 二目表达式OrElse, 左边是:(c.Id > 5 && c.Name.Contains("asdd")) 右边是:(c.Id==1 || c.Id==2) 可以看到括号的作用已经反映到表达式里了。
二目表达式OrElse,----> 对应 SQL OR 左边 ---> 对应 假设 L 右边 ---> 对应 假设 R SQL不就是 (L) OR (R) 把L和R扩展开,不就是你要的结果:((Id > 5) AND (Name like '%asdd%')) OR ((Id = 1) OR (Id = 2))
回复 点赞
Eason0807 2019年12月17日
如果按照表达式的意思的话应该是(Id > 5 AND Name like '%asdd%') OR (Id = 1 OR Id = 2) 这个样子的
回复 点赞
Eason0807 2019年12月17日
引用 4 楼 github_36000833 的回复:
逻辑上,你已经不需要括号了。 括号的作用,已经反应到表达里了。
现在我翻译完是这样的 Id > 5 AND Name like '%asdd%' OR Id = 1 OR Id = 2
回复 点赞
github_36000833 2019年12月17日
逻辑上,你已经不需要括号了。 括号的作用,已经反应到表达里了。
回复 点赞
Eason0807 2019年12月17日
引用 1 楼 github_36000833 的回复:
表达式树不是已经给你结构了吗? 比如: 二目表达式OrElse, 左边是:(c.Id > 5 && c.Name.Contains("asdd")) 右边是:(c.Id==1 || c.Id==2) 可以看到括号的作用已经反映到表达式里了。
我的目的是,把传进来的表达式翻译成Sql查询条件
回复 点赞
Eason0807 2019年12月17日
引用 1 楼 github_36000833 的回复:
表达式树不是已经给你结构了吗? 比如: 二目表达式OrElse, 左边是:(c.Id > 5 && c.Name.Contains("asdd")) 右边是:(c.Id==1 || c.Id==2) 可以看到括号的作用已经反映到表达式里了。
是的,用ExpressionVisitor我可以取到表达式的Member,BinaryExpression,Constant,Method这几部分,但是圆弧括号怎么取呢?难道要正则匹配出来吗?
回复 点赞
github_36000833 2019年12月17日
表达式树不是已经给你结构了吗?

比如:
二目表达式OrElse,
左边是:(c.Id > 5 && c.Name.Contains("asdd"))
右边是:(c.Id==1 || c.Id==2)

可以看到括号的作用已经反映到表达式里了。
回复 点赞
发动态
发帖子
C#
创建于2007-09-28

8.5w+

社区成员

64.0w+

社区内容

.NET技术 C#
社区公告
暂无公告