动态生成的lambda方法如下:
public Expression Lambda(IList<WM_Region> conditionRegion)
{
Expression lambda = null;
var parameter = Expression.Parameter(typeof(WM_Region), "x");
BinaryExpression body = null;
try
{
for (int i = 0; i < conditionRegion.Count; i++)
{
body = GetBinaryExpression(conditionRegion[i], parameter, body);
}
lambda = Expression.Lambda<Func<UserInfos, bool>>(body, parameter);
}
catch (Exception ex)
{
throw ex;
}
return lambda;
}
public Expression Lambda(IList<WM_Region> conditionRegion)
{
Expression lambda = null;
var parameter = Expression.Parameter(typeof(WM_Region), "x");
BinaryExpression body = null;
try
{
for (int i = 0; i < conditionRegion.Count; i++)
{
body = GetBinaryExpression(conditionRegion[i], parameter, body);
}
lambda = Expression.Lambda<Func<UserInfos, bool>>(body, parameter);
}
catch (Exception ex)
{
throw ex;
}
return lambda;
}
Expression exp = null;
//Call your own function to initialize expression
//exp = Lambda(...); //Del is a Func<UserInfos,bool> delegate instance
var del = Expression.Lambda<Func<UserInfos, bool>>(exp).Compile(); //Call the delegate
var ret = del(new UserInfos());