.NET 动态lambda表达式(1)

       比如一个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

       这样就得了我们想要的东西了,这是初步的使用,下一篇总结一个帮助类来实现我们想要的。

发布了109 篇原创文章 · 获赞 42 · 访问量 57万+

猜你喜欢

转载自blog.csdn.net/sinat_28984567/article/details/96731783