エンティティ フレームワークを使用するデータ アクセス クラスに次のメソッドがあります。
public static IEnumerable<entityType> GetWhere(Func<entityType, bool> wherePredicate)
{
using (DataEntities db = new DataEntities())
{
var query = (wherePredicate != null)
? db.Set<entityType>().Where(wherePredicate).ToList()
: db.Set<entityType>().ToList();
return query;
}
}
これは、すべてのレイヤーでエンティティを使用すると正常に機能します...ただし、DTO クラスの使用に移行しようとしており、次のようなことをしたいと考えています。
public static IEnumerable<EntityTypeDTO> GetWhere(Func<EntityTypeDTO, bool> wherePredicate)
{
//call a method here which will convert Func<EntityTypeDTO,bool> to
// Func<EntityType,bool>
using (DataEntities db = new DataEntities())
{
var query = new List<EntityType>();
if (wherePredicate == null)
{
query = db.Set<EntityType>().ToList();
}
else
{
query = (wherePredicate != null)
? db.Set<EntityType>().Where(wherePredicate).AsQueryable<EntityType>().ToList()
: db.Set<EntityType>().ToList();
}
List<EntityTypeDTO> result = new List<EntityTypeDTO>();
foreach(EntityType item in query)
{
result.Add(item.ToDTO());
}
return result;
}
}
基本的に、Func を Func に変換するメソッドが必要です。
Func を式ツリーに分解してから、entityType で何らかの方法で再構築する必要があると思いますか?
プレゼンテーション層が式クエリを渡すだけにするためにこれを行いたいですか?
何か基本的なことが欠けているのでしょうか、それとも、クエリの詳細を知らなくても DTO からデータ アクセス クラスにクエリを渡すことができる、より簡単な設計パターンはありますか?
DTO をエンティティから継承させようとしましたが、どちらも機能していないようです。
私が見逃しているより良いデザインパターンがあれば、ポインターが欲しいので、そこから調査できます...