故如虹,知恩;故如月,知明
排名
6
文章
6
粉丝
16
评论
8
{{item.articleTitle}}
{{item.blogName}} : {{item.content}}
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2024TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
欢迎加群交流技术

表达式树解析简单sql条件语句

3963人阅读 2019/5/29 11:55 总访问:3841856 评论:0 收藏:0 手机
分类: .NET



一个条件类的表达式树的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;


欢迎加群讨论技术,群:677373950(满了,可以加,但通过不了),2群:656732739

评价