鉴于:
class MyDao
{
public int SiteId {get;set;}
public Cv3AddressDao ReadSingle(Expression<Func<Cv3AddressDao, bool>> predicate)
{ //...
}
}
class MyEntity
{
public int SiteId {get;set;}
}
如何获取类型的谓词参数Expression<Func<MyDao, bool>>
并将其转换为Expression<Func<MyEntity, bool>>
?
我正在寻找的答案类型
请注意,答案必须显示转换是如何工作的。我想要一个与此类似但有效的实现:)....
public MyDao ReadSingle(Expression<Func<MyDao , bool>> predicate)
{
var mappedPredicate = MapFun<MyDao , MyEntity>(predicate);
var result = repository.GetSingle<MyEntity>(mappedPredicate);
return Convert(result);//Converts Entity to Dao...safe to ignore this line
}
Expression<Func<B, bool>> MapFun<A, B>(Expression<Func<A, bool>> input)
{
Expression<Func<B, bool>> result = null;//How to convert?
return result;
}
关于我为什么想要这个设计的详细信息......
这是一个 asp.net MVC 5 应用程序。这种转换很重要的原因是我的 View 不知道类型MyEntity
。换句话说,如果我要这样做:
myDaoObject.ReadSingle<MyEntity>(myEntity => myEntity.SiteId == "123");
然后我的视图层必须引用我的 DLL 层,因为我在这里使用MyEntity
. 我希望 View 层与 Dao 一起工作:
myDaoObject.ReadSingle<MyDao>(myDao=> myDao.SiteId == "123");
但是,现在我必须转换 Dao 以使其可用于存储库。Repository 只知道 DL 对象。我试图避免创建冗余存储库只是为了支持这种翻译。DAO 包含实体的所有属性以及一些属性。