首页 新闻 会员 周边

Predicate<TSource> match Lamda表达式问题

0
悬赏园豆:100 [待解决问题]
 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方法体中获取?
各位大神,请帮忙想下办法。

迷失的背影的主页 迷失的背影 | 初学一级 | 园豆:97
提问于:2014-04-09 11:08
< >
分享
所有回答(4)
0
JustDotNet | 园豆:229 (菜鸟二级) | 2014-04-09 11:25

我当然知道match就是我的表达式了,可能我上面表达的不清楚,我的意思呢是:

 Entity<RegisterModel>.Remove(a => a.UserName == "" && a.Password == "");

这句代码对吧,a.UserName == "" && a.Password == ""这相当于条件对不?

 public static int Remove(Predicate<TSource> match)这个方法中,我如何获取a.UserName == "" && a.Password == ""这个。  我需要用这个条件做数据库操作,不是泛型集合之类的查找。

支持(0) 反对(0) 迷失的背影 | 园豆:97 (初学一级) | 2014-04-09 11:30
0

这 要看你的 Remove里是怎么操作数据库的, 为什么要传 Predicate<TSource>?

看看 Remove里要的是什么委托, 比如 参数是Func<TSource,bool> match,直接 传进去就行。。。。

Qlin | 园豆:2403 (老鸟四级) | 2014-04-09 12:23
0

别人是让你看清楚到底什么是lambda表达式,其实它就是匿名函数。说简单点你的问题就是想从这个函数体里面获得一些数据不是?说严重点,你这是想搞代码逆向工程啊,说严重点,你是想反编译。

PlutoWang | 园豆:202 (菜鸟二级) | 2014-04-09 13:51

有点意思,可以这么说,像泛型集合啊之类的写Lamda表达式做些操作,我想基本上码农都会,我是想把这个Lamda表达式应用到我的方法上,别人在调用的我方法时也算是个规范。   请问您有这方面类的思路不?

支持(0) 反对(0) 迷失的背影 | 园豆:97 (初学一级) | 2014-04-09 13:55

@迷失的背影: 没问题,可以。但问题是,你暴露了这个委托类型,那么你关心他里面的内容是什么干吗?就相当于你给了别人一个接口,却想知道接口方法里面是怎么实现的。这个思路是不对的。

lambda精髓是什么?输入=>输出,没有过程,因为为了剪短,输出包含过程,或者说输出就是过程。

如楼下,即便知道内容了又怎么样,你知道上下文是个什么环境,expression.body怎么去解析?

支持(0) 反对(0) PlutoWang | 园豆:202 (菜鸟二级) | 2014-04-11 18:19
0

你加个断点就知道怎么获得表达式了,比如表达式是p=>p.Age,expression.body就是p.age,,expression.parameters[0]是p,

happydaily | 园豆:301 (菜鸟二级) | 2014-04-09 15:40
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册