让它存在:
Expression<Func<Message, bool>> exp1 = x => x.mesID == 1;
Expression<Func<MessageDTO, bool>> exp2 = x => x.mesID == 1;
现在我需要将exp1传递给_db.Messages.where(exp1);的问题是,我只有exp2,我需要将其类型转换为Message,所有属性都相同!
现在我这样做:
var par = Expression.Parameter(typeof(Message));
var ex = (Expression<Func<Message, bool>>)Expression.Lambda(exp2.Body, par);
这个问题在于,输入参数被改变了,但是lambda体内的"x.mesID"还是旧类型。
有没有办法在lambda体内也修改所有参数类型,或者以某种方式更改输入参数以反映在lambda体内呢?
我想这是我在使用LINQ时经常遇到的一个大问题,因为我无法在不同层之间传递生成的类,否则会使层耦合,所以我必须使用轻量级的类。现在,业务层如何使用像_db.Messages.where()之类的方法呢?而业务层不知道Message类型,只知道MessageDTO。