public static class Entity<TSource> where TSource : class { public static int Remove(Predicate<TSource> match) { //代码块
//最主要的是这块数据库操作代码
//如何获取match表达式
//也就是如何获取a.UserName==""的条件 return 0; } }
上面的意思很明显,我想做这么个东西,没找到任何资料。
这个类是属于是个数据库操作类,我外部调用的时候呢,可以执行增删改查等操作。
RegisterModel q = new RegisterModel(); Entity<RegisterModel>.Remove(a => a.UserName == "" && a.Password == ""); Entity<RegisterModel>.Update(q, a => a.UserName); Entity<RegisterModel>.Insert(q);
如上面代码,目前的问题是我在调用Remove中写的Lamda表达式如何在Remove方法体中获取?
各位大神,请帮忙想下办法。
参数match就是你的表达式...
参考http://msdn.microsoft.com/zh-cn/library/bb397687.aspx 和http://msdn.microsoft.com/zh-cn/library/bfcke1bz.aspx
我当然知道match就是我的表达式了,可能我上面表达的不清楚,我的意思呢是:
Entity<RegisterModel>.Remove(a => a.UserName == "" && a.Password == "");
这句代码对吧,a.UserName == "" && a.Password == ""这相当于条件对不?
public static int Remove(Predicate<TSource> match)这个方法中,我如何获取a.UserName == "" && a.Password == ""这个。 我需要用这个条件做数据库操作,不是泛型集合之类的查找。
这 要看你的 Remove里是怎么操作数据库的, 为什么要传 Predicate<TSource>?
看看 Remove里要的是什么委托, 比如 参数是Func<TSource,bool> match,直接 传进去就行。。。。
别人是让你看清楚到底什么是lambda表达式,其实它就是匿名函数。说简单点你的问题就是想从这个函数体里面获得一些数据不是?说严重点,你这是想搞代码逆向工程啊,说严重点,你是想反编译。
有点意思,可以这么说,像泛型集合啊之类的写Lamda表达式做些操作,我想基本上码农都会,我是想把这个Lamda表达式应用到我的方法上,别人在调用的我方法时也算是个规范。 请问您有这方面类的思路不?
@迷失的背影: 没问题,可以。但问题是,你暴露了这个委托类型,那么你关心他里面的内容是什么干吗?就相当于你给了别人一个接口,却想知道接口方法里面是怎么实现的。这个思路是不对的。
lambda精髓是什么?输入=>输出,没有过程,因为为了剪短,输出包含过程,或者说输出就是过程。
如楼下,即便知道内容了又怎么样,你知道上下文是个什么环境,expression.body怎么去解析?
你加个断点就知道怎么获得表达式了,比如表达式是p=>p.Age,expression.body就是p.age,,expression.parameters[0]是p,