与えられた:
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 アプリケーションです。この変換が重要な理由は、ビューが type を認識しないためMyEntity
です。言い換えれば、私がやった場合:
myDaoObject.ReadSingle<MyEntity>(myEntity => myEntity.SiteId == "123");
ここでは を使用しているため、View レイヤーは DLL レイヤーを参照する必要がありますMyEntity
。代わりに、View レイヤーを Dao と連携させたい:
myDaoObject.ReadSingle<MyDao>(myDao=> myDao.SiteId == "123");
しかし、今度は Dao を変換してリポジトリで使用できるようにする必要があります。リポジトリは DL オブジェクトのみを認識します。この翻訳をサポートするためだけに冗長なリポジトリを作成しないようにしています。DAO には、エンティティのすべてのプロパティといくつかのプロパティが含まれています。