考虑:转换函数功能<TDao, bool>到Func键<TEntity,bool>的
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应用程序。此转换很重要的原因是我的视图不知道类型MyEntity
。换句话说,如果我是这样做:
myDaoObject.ReadSingle<MyEntity>(myEntity => myEntity.SiteId == "123");
然后我查看层,因为在这里我使用MyEntity
引用我的DLL层。我想View层与道工作,而不是:
myDaoObject.ReadSingle<MyDao>(myDao=> myDao.SiteId == "123");
可是,现在我不得不清道转换,使其可用与库。存储库只知道DL对象。我试图避免创建一个冗余的Repository来支持这个翻译。 DAO包含实体的所有属性加上一些。
你能告诉我们你调查和尝试过什么吗? – Default
@默认 - 问题更新了一个接近我需要的实现。 –