我的存储库中的方法与服务层中的调用方法之间存在兼容性问题。
我的存储库类中的方法如下所示:
public TEntity Single(Expression<Func<TEntity, bool>> predicate)
{
// Code left out
}
然后调用上述方法的服务层中的方法如下所示:
public TDTOEntity Single(Expression<Func<TDTOEntity, bool>> predicate)
{
return repository.Single(predicate).ProjectedAs<TDTOEntity>();
}
我得到的错误是:
无法转换
System.Linq.Expressions.Expression<System.Func<TDTOEntity,bool>>
来System.Linq.Expressions.Expression<System.Func<TEntity,bool>>
如何在两个表达式之间进行转换?这样的事情是可能的吗?
答案 0 :(得分:0)
如果服务层的方法不知道存储库实体,那么,没有解决方案。
这对所有“映射”系统都有意义:如果你不知道源和目标,那你就麻烦了!
因为即使参数没有出错,repository.Single
如何知道哪个存储库实体有关?
所以你必须以这种方式改变你的方法
public TDTOEntity Single<TEntity, TDTOEntity>(Expression<Func<TEntity, bool>> predicate)
{
return repository.Single(predicate).ProjectedAs<TDTOEntity>();
}
或者这个(如果ProjectedAs
进行枚举就没有意义,我希望这不是真的。假设你有一个方法All<TEntity>
,或等价的东西返回{{1} })
IQueryable<TEntity>
使用类型作为参数和反射,这些解决方案可能略有不同,但是......无论如何,你需要知道TEntity和TDTOEntity之间的关系。