c# 通用计算机,C#通用表达式树

//通用Lambda表达式类

public class LambdaExtentionwhere T:class

{

private List myExpressionList;

private ParameterExpression myParameter;

public LambdaExtention()

{

myExpressionList = new List();

//创建表达式参数

myParameter = Expression.Parameter(typeof(T), "x");

打印x

//Debug.Print($"LambdaExtention.myParameter:{myParameter.ToString()}");

}

//字符串Contains筛选

public void Contains(Expression>expProperty,object value)

{

打印类似Contains.expProperty.Body:x.PropertyOrField

//Debug.Print($"Contains.expProperty.Body:{expProperty.Body.ToString()}");

Expression expRes = Expression.Call(expProperty.Body,

typeof(string).GetMethod("Contains"),Expression.Constant(value));

打印类似Contains.expRes:x.PropertyOrField.Contains("value")

//Debug.Print($"Contains.expRes:{expRes.ToString()}");

myExpressionList.Add(expRes);

}

//等于

public void Equal(Expression>expProperty,object value)

{

var member = GetMemberExpression(expProperty);

Expression expRes= Expression.Equal(member, Expression.Constant(value, member.Type));

打印Equal.expRes:(x.CmsSn==value)

//Debug.Print($"Equal.expRes:{expRes.ToString()}");

myExpressionList.Add(expRes);

}

//小于

public void LessThan(Expression> expProperty, object value)

{

var member = GetMemberExpression(expProperty);

Expression expRes = Expression.LessThan(member, Expression.Constant(value, member.Type));

myExpressionList.Add(expRes);

}

//小于等于

public void LessThanOrEqual(Expression> expProperty, object value)

{

var member = GetMemberExpression(expProperty);

Expression expRes = Expression.LessThanOrEqual(member, Expression.Constant(value, member.Type));

myExpressionList.Add(expRes);

}

//大于

public void GreaterThan(Expression> expProperty, object value)

{

var member = GetMemberExpression(expProperty);

Expression expRes = Expression.GreaterThan(member, Expression.Constant(value, member.Type));

myExpressionList.Add(expRes);

}

//大于等于

public void GreaterThanOrEqual(Expression> expProperty, object value)

{

var member = GetMemberExpression(expProperty);

Expression expRes = Expression.GreaterThanOrEqual(member, Expression.Constant(value, member.Type));

myExpressionList.Add(expRes);

}

//获取多个条件相&的Lambda

public Expression> GetAndLambda()

{

Expression whereExpr = null;

foreach (var expr in myExpressionList)

{

if (whereExpr == null)

whereExpr = expr;

else

whereExpr = Expression.And(whereExpr, expr);

}

if (whereExpr == null)

return null;

return Expression.Lambda>(whereExpr,myParameter);

}

//获取多个条件相|的Lambda

public Expression> GetOrLambda()

{

Expression whereExpr = null;

foreach (var expr in myExpressionList)

{

if (whereExpr == null)

whereExpr = expr;

else

whereExpr = Expression.Or(whereExpr, expr);

}

if (whereExpr == null)

return null;

return Expression.Lambda>(whereExpr, myParameter);

} //获取MemberExpression,类似x.PropertyOrField

private MemberExpression GetMemberExpression(Expression>exp)

{

打印类似GetMemberExpression.exp:x =>(x.CmsSn==value),exp.Body:(x.CmsSn==value)

//Debug.Print($"GetMemberExpression.exp:{exp.ToString()},exp.Body:{exp.Body.ToString()}");

var arrSplit = exp.Body.ToString().Split("(.)".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);

var property = arrSplit[arrSplit.Length - 1];

MemberExpression member = Expression.PropertyOrField(myParameter, property);

打印类似GetMemberExpression.member:x.CmsSn

//Debug.Print($"GetMemberExpression.member:{member.ToString()}");

return member;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值