表达式树解析简单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;
