构建方式
/// <summary>
/// 构建表达式
/// </summary>
/// <typeparam name="T">类型</typeparam>
/// <param name="key">键</param>
/// <param name="Value">值</param>
/// <returns></returns>
public static Expression<Func<T,bool>> ExpressionWhere<T>(string key,string Value)
{
ParameterExpression expx = Expression.Parameter(typeof(T), "x");//变量
MemberExpression exp1 = Expression.Property(expx, key);//派生类基类下的属性 变量 x.Name
ConstantExpression constExpr = Expression.Constant(Value, typeof(string));//常量
BinaryExpression binary = Expression.Equal(exp1, constExpr);//构建表达式x.Name=="值"
IEnumerable<ParameterExpression> parameterExpressions = new ParameterExpression[1]
{
expx //存放变量
};
//构建Lamada x=>x.Name
var ps= Expression.Lambda<Func<T, bool>>(binary, false, parameterExpressions);
return ps;
}
使用方式:
public class Bans
{
public string Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
}
List<Bans> bans = new List<Bans>()
{
new Bans{Id="1",Name="扎根三1",Age=10},
new Bans{Id="2",Name="扎根三2",Age=50},
new Bans{Id="3",Name="扎根三3",Age=1000}
};
var spt = bans.AsQueryable<Bans>().SingleOrDefault(ExpressionWhere<Bans>("Name", "扎根三3"));