.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

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
.NET中,Lambda表达式可以用于创建委托、LINQ查询和Expression树等。下面分别介绍它们的用法: 1. 创建委托 Lambda表达式可以用于创建委托,示例代码如下: ```csharp Func<int, int, int> func = (x, y) => x + y; int result = func(3, 4); ``` 在上面的示例中,Lambda表达式`(x, y) => x + y`创建了一个接收两个int类型参数并返回它们的和的委托,然后将其赋值给变量`func`。在调用时,可以像调用普通函数一样传递参数,并将结果赋值给变量`result`。 2. LINQ查询 Lambda表达式可以用于创建LINQ查询,示例代码如下: ```csharp var list = new List<int> { 1, 2, 3, 4, 5 }; var result = list.Where(x => x % 2 == 0); ``` 在上面的示例中,Lambda表达式`x => x % 2 == 0`用于筛选出列表中的偶数。其中,`Where`方法是LINQ查询中的一个方法,它接收一个Lambda表达式作为参数,并返回一个新的集合,该集合包含符合条件的元素。 3. Expression树 Lambda表达式也可以用于创建Expression树,示例代码如下: ```csharp Expression<Func<int, int, int>> expr = (x, y) => x + y; var func = expr.Compile(); int result = func(3, 4); ``` 在上面的示例中,Lambda表达式`(x, y) => x + y`创建了一个Expression树,它表示一个接收两个int类型参数并返回它们的和的函数。然后,将其编译成委托并将委托赋值给变量`func`。在调用时,可以像调用普通函数一样传递参数,并将结果赋值给变量`result`。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值