using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using System.Threading.Tasks;
namespace Library
{
///
/// 动态表达式帮助类
///
public class ExpressionHelper
{
///
/// 生成表达式树
///
///
///
///
public static Expression
{
List
Type type = searchModel.GetType();
ParameterExpression parameterExpression = Expression.Parameter(type, "x");
var pros = type.GetProperties();
foreach (var t in pros)
{
var objValue = t.GetValue(searchModel, null);
if (objValue != null && t.Name != "isid")
{
Expression proerty = Expression.Property(parameterExpression, t);
ConstantExpression constantExpression = Expression.Constant(objValue, t.PropertyType);
if (t.PropertyType.Name != "Int32")
mcList.Add(Expression.Call(proerty, typeof(string).GetMethod("Contains"), new Expression[] { constantExpression }));
}
}
if (mcList.Count == 0)
return Expression.Lambda
else
return Expression.Lambda
}
public static Expression MethodCall
{
if (mcList.Count == 1) return mcList[0];
BinaryExpression binaryExpression = null;
for (int i = 0; i < mcList.Count; i += 2)
{
if (i < mcList.Count - 1)
{
BinaryExpression binary = Expression.OrElse(mcList[i], mcList[i + 1]);
if (binaryExpression != null)
binaryExpression = Expression.OrElse(binaryExpression, binary);
else
binaryExpression = binary;
}
}
if (mcList.Count % 2 != 0)
return Expression.OrElse(binaryExpression, mcList[mcList.Count - 1]);
else
return binaryExpression;
}
}
}