首页 新闻 会员 周边

求解释下面这个C#接口定义的方法

0
悬赏园豆:20 [已解决问题] 解决于 2014-08-19 11:18

int Count(Expression<Func<T, bool>> predicate);

为什么不是int Count(Func<T, bool> predicate);

北在北方的主页 北在北方 | 初学一级 | 园豆:180
提问于:2014-08-19 09:04
< >
分享
最佳答案
1

两个写法,在.net层面是兼容的,因为Func<T,bool>能隐式的转换为Exprression<Func<T,bool>>(当然,逆向是不可以的)。

之所以使用Expression而不是直接使用Func,是为了Linq to Entity到SQL的转换。一个Expression能轻松的转换为SQL,而一个Func要先转换为Expression才能再转换。

这里写Expression,也有提醒程序员,你写的条件可能要转换为SQL语句 的意思。

收获园豆:20
519740105 | 大侠五级 |园豆:5810 | 2014-08-19 10:59
其他回答(2)
0

看场景,参数类型不同,使用的 provider 解析器不一样。

Qlin | 园豆:2403 (老鸟四级) | 2014-08-19 09:11

怎么讲

支持(0) 反对(0) 北在北方 | 园豆:180 (初学一级) | 2014-08-19 09:26

@北在北方: 你先说  你这个方法用来干啥的,用在哪个地方?

支持(0) 反对(0) Qlin | 园豆:2403 (老鸟四级) | 2014-08-19 09:45

@Qlin: 在项目定义一个接口IBase<T>,这个接口有一个方法定义是这个int Count(Expression<Func<T, bool>> predicate);
 这个接口项目的其他接口继承这个接口,IUser : IBase<Model.User>, 在一个类UserDAL中继承IUser
,

UserDAL:IUser,在这个UserDAL中对应的实现Count方法定义的那个方法怎么使用predicate?

在UserBLL中调用UserDAL的这个方法时,参数怎么传递是直接在参数那里写Lambda吗?

支持(0) 反对(0) 北在北方 | 园豆:180 (初学一级) | 2014-08-19 09:59
0

多包装了一层,在这一层类里可以做更多的控制。

空明流光 | 园豆:106 (初学一级) | 2014-08-19 09:23

那我该怎么调用这个方法,怎么传参数?

支持(0) 反对(0) 北在北方 | 园豆:180 (初学一级) | 2014-08-19 09:26

@北在北方: 要看他怎么包装的,你用反编译工具看一下不就知道它是怎么包装的,你不就能调用了吗?

支持(0) 反对(0) 空明流光 | 园豆:106 (初学一级) | 2014-08-19 09:28
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册