排名
6
文章
6
粉丝
16
评论
8
{{item.articleTitle}}
{{item.blogName}} : {{item.content}}
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:
50010702506256


欢迎加群交流技术

一个条件类的表达式树的body一般分为三个部分。左边的属性名,中间的判断符号,右边的值。
如图:
我们要把这类的表达式树解析成sql语句条件,只需要拿到左边,中间,右边的值就行
比如这样的一个
Expression<Func<UserInfo, bool>> func = a => a.UserName == "xx";
我们解析成where UserName='xx' 即可。代码如下,分别解析左边,中间,右边即可
BinaryExpression binaryExpression = func.Body as BinaryExpression; //处理左边的内容 MemberExpression memberExpression = binaryExpression.Left as MemberExpression; string value = memberExpression.Member.Name; string paramter = " where " + value; //中间 if (binaryExpression.NodeType == ExpressionType.Equal) { paramter += " = "; } if (binaryExpression.NodeType == ExpressionType.GreaterThan) { paramter += " > "; } if (binaryExpression.NodeType == ExpressionType.GreaterThanOrEqual) { paramter += " >= "; } if (binaryExpression.NodeType == ExpressionType.LessThan) { paramter += " < "; } //右边 ConstantExpression constantExpression = binaryExpression.Right as ConstantExpression; object right = "'" + constantExpression.Value + "'"; paramter += right;
效果如下:
解析的时候如果不知道,左边,右边具体是什么类型,可以直接调试的时候进行看类型就行
比如你不知道这里的Left,Right什么类型,点击进去看就知道了
比如我们看看Left的,明显就是Member类型
看到类型就可以转换成具体的类型,就很方便解析了,转换成MemberExpression即可
//处理左边的内容 MemberExpression memberExpression = binaryExpression.Left as MemberExpression; string value = memberExpression.Member.Name;
欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739。有需要软件开发,或者学习软件技术的朋友可以和我联系~(Q:815170684)
评价