expres

C#进阶系列——动态Lamada

回眸只為那壹抹淺笑 提交于 2020-02-24 16:43:42
前言:在DDD系列文章里面,我们在后台仓储里面封装了传递Lamada表达式的通用方法,类似这样:      public virtual IQueryable<TEntity> Find(Expression<Func<TEntity, bool>> express) { Func<TEntity, bool> lamada = express.Compile(); return UnitOfWork.context.Set<TEntity>().Where(lamada).AsQueryable<TEntity>(); } 通过前端传过来的Lamada表达式,直接放到Where条件里面查询。那么问题来了,我们前端如何传入Lamada呢?当然,有人说了,这个不用传啊,前端直接.Find(x=>x.Name=="abc")这样写就好了啊。确实,如果前端条件只有一个条件,你确实可以这样简单处理,但是实际开发的过程中,我们很多时候是需要传递多个参数,并且.Find(x=>x.Name=="abc")这种写法也不利于方法的封装。于是,我们神奇的动态Lamada诞生了。 一、再谈Lamada表达式 1、匿名委托 之前在介绍委托的时候我们介绍过一种特殊的匿名委托,它型如: class Program { private delegate void SayHello(string name);