动态创建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();

}

posted @ 2013-04-12 15:55  net_miao  阅读(270)  评论(0编辑  收藏  举报