剑轩

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

电脑版发表于:2019/5/29 11:55



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


关于TNBLOG
TNBLOG,技术分享。技术交流:群号677373950
ICP备案 :渝ICP备18016597号-1
App store Android
精彩评论
{{item.replyName}}
{{item.content}}
{{item.time}}
{{subpj.replyName}}
@{{subpj.beReplyName}}{{subpj.content}}
{{subpj.time}}
猜你喜欢