动态创建lambda表达式
学习lambda动态创建其实是一个巧合,是因为朋友遇到的一个问题。
需求大概是这样的,在页面中选择表中的一个字段类型,后台便返回根据该字段进行OrderBy的数据。
因为他项目用的是linq to entity ,想了一会,果断感觉应该在lambda上做文章。
相比那些拥有丰富经验的大神来说,我这代码微不足道。
这里只是做下笔记,以后再次遇到类似问题的时候可以方便使用。
再次声明,我所写的这个方法,没有技术含量,仅供和我一样身处菜鸟级别并想在编程界一直走下去的人学习。(这都是扯淡,其实根本原因是上班太无聊了。。。。)
public List<E_ActivityMain> GetAactivityMainPageList(int pageIndex, int pageSize)
{
ActivityMainRepository info = new ActivityMainRepository();
//创建一个可用于标识表达式树中的参数或变量
var parameter = Expression.Parameter(typeof(E_ActivityMain), "a");
//创建需要表达式指向的表中的字段名(这里是数据库表中编号字段 “Id”)
var body = Expression.Property(parameter, "Id");
//创建一个在编译时已知的lambda表达式
var lambda = Expression.Lambda<Func<E_ActivityMain, Int32>>(body, parameter);
//Compile()方法是为了将创建的lambda 表达式编译为可执行代码,并生成表示该 lambda 表达式的委托。
return info.GetActivityMainInfo().OrderBy(lambda.Compile()).ToList();
}