Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在LINQ表达式之间转换_C#_Asp.net_.net_Linq_C# 4.0 - Fatal编程技术网

C# 如何在LINQ表达式之间转换

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

我的存储库中的方法与服务层中的调用方法之间存在兼容性问题

my repository类中的方法如下所示:

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是如何关联的。我认为可以用反射来重建这个表达式。但我不想在那件事上伤到我的手指