我在使用实体框架的数据访问类中有以下方法:
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 从似乎也不起作用的实体继承?
如果我缺少更好的设计模式,我会喜欢一个指针,我可以从那里进行调查......