比如一个List集合,我们要根据传过来的字段名称和值对其进行搜索,传过来的是不定的,我们没法全部判断一遍,我们可以动态的处理。
定义一个person类:
public class PerSon
{
public string Name { get; set; }
public int Age { get; set; }
public int Type { get; set; }
}
测试方法:
/// <summary>
/// 测试方法
/// </summary>
/// <param name="ColName">字段名</param>
/// <param name="Value">值</param>
/// <returns></returns>
public ActionResult DyList(string ColName,string Value)
{
//1.定义lamada的参数,型如我们常写的“x=>”
ParameterExpression m_Parameter = Expression.Parameter(typeof(PerSon), "x");
//2.定义要使用lamada的属性成员
MemberExpression member = Expression.PropertyOrField(m_Parameter, ColName);
//3.定义筛选的操作 这里用了contains,可以根据需要改变
Expression expRes = Expression.Call(member, typeof(string).GetMethod("Contains"), Expression.Constant(Value));
//4.将表达式转换为Lamada的表达式
Expression<Func<PerSon, bool>> exprelamada = Expression.Lambda<Func<PerSon, bool>>(expRes, m_Parameter);
//5.做10条测试数据
var lstRes = new List<PerSon>();
for (var i = 0; i < 10; i++)
{
var oModel = new PerSon();
oModel.Age = i;
oModel.Name = "测试"+i.ToString();
lstRes.Add(oModel);
}
//6.将Expression表达式转换为Func委托,用于Where里面的参数
var lamada = exprelamada.Compile();
//7.看一下结果
lstRes = lstRes.Where(lamada).ToList();
return View();
}
测试一下,/DyList?ColName=Name&Value=2
这样就得了我们想要的东西了,这是初步的使用,下一篇总结一个帮助类来实现我们想要的。