C# 如何在LINQ表达式之间转换
我的存储库中的方法与服务层中的调用方法之间存在兼容性问题 my repository类中的方法如下所示:C# 如何在LINQ表达式之间转换,c#,asp.net,.net,linq,c#-4.0,C#,Asp.net,.net,Linq,C# 4.0,我的存储库中的方法与服务层中的调用方法之间存在兼容性问题 my repository类中的方法如下所示: public TEntity Single(Expression<Func<TEntity, bool>> predicate) { // Code left out } public TDTOEntity Single(Expression<Func<TDTOEntity, bool>> predicate) { ret
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>();
}
public TEntity Single(表达式谓词)
{
//遗漏的代码
}
然后,我的服务层中调用上述方法的方法如下所示:
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>();
}
public-TDTOEntity-Single(表达式谓词)
{
返回repository.Single(谓词).ProjectedAs();
}
我得到的错误是:
无法从转换
System.Linq.Expressions.Expression
to
System.Linq.Expressions.Expression
如何在这两个表达式之间转换?这样做可能吗?如果服务层的方法不知道存储库实体,那么就没有解决方案 这对于所有的“映射”系统都是有意义的:如果你不知道源和目标,你就。。。有麻烦了 原因即使参数中没有错误,
repository.Single
如何知道涉及哪个存储库实体
因此,您必须以这种方式更改您的方法
public TDTOEntity Single<TEntity, TDTOEntity>(Expression<Func<TEntity, bool>> predicate)
{
return repository.Single(predicate).ProjectedAs<TDTOEntity>();
}
使用类型作为参数和反射,这些解决方案可能略有不同,但。。。无论如何,您需要知道tenty和TDTOEntity之间的关系。很明显,对于
Func
delegates,您有不同的输入参数,这几乎是不可能的,因为您无法告诉编译器tenty和TDTOEntity是如何关联的。我认为可以用反射来重建这个表达式。但我不想在那件事上伤到我的手指