两个写法,在.net层面是兼容的,因为Func<T,bool>能隐式的转换为Exprression<Func<T,bool>>(当然,逆向是不可以的)。
之所以使用Expression而不是直接使用Func,是为了Linq to Entity到SQL的转换。一个Expression能轻松的转换为SQL,而一个Func要先转换为Expression才能再转换。
这里写Expression,也有提醒程序员,你写的条件可能要转换为SQL语句 的意思。
看场景,参数类型不同,使用的 provider 解析器不一样。
怎么讲
@北在北方: 你先说 你这个方法用来干啥的,用在哪个地方?
@Qlin: 在项目定义一个接口IBase<T>,这个接口有一个方法定义是这个int Count(Expression<Func<T, bool>> predicate);
这个接口项目的其他接口继承这个接口,IUser : IBase<Model.User>, 在一个类UserDAL中继承IUser
,
UserDAL:IUser,在这个UserDAL中对应的实现Count方法定义的那个方法怎么使用predicate?
在UserBLL中调用UserDAL的这个方法时,参数怎么传递是直接在参数那里写Lambda吗?
多包装了一层,在这一层类里可以做更多的控制。
那我该怎么调用这个方法,怎么传参数?
@北在北方: 要看他怎么包装的,你用反编译工具看一下不就知道它是怎么包装的,你不就能调用了吗?