【发布时间】:2019-05-15 16:19:25
【问题描述】:
我有一个不知道如何解决的小挑战。
我需要从这个Expression<Func<TEntity, URequest, bool>> 转换成这个Expression<Func<TEntity, bool>>。
第二个将用于查询数据源。
这个想法是有一个带有以下签名的基类构造函数
abstract class Base
{
Base(Expression<Func<TEntity, TRequest, bool>> expression) { .... }
}
我可以在派生的东西中提供这样的表达式
class Derived : Base
{
Derived() :
base ((enttiy, request) => entity.SomeProp == request.SomePropValue) { }
}
这是由基地本身使用的
/// Ctor
Base(Expression<Func<TEntity, TRequest, bool>> expression)
{
_pipelineBuilder.AddFetchEntityStep (expression)
}
AddFetchEntityStep 是管道中的一个步骤
管道看起来像这样。
第 1 步:FetchEntity 第 2 步:执行 第 3 步:验证 第三步:执行
现在有两种方法可以通过 Id 或另一个属性来检索实体。
为此我有一个
ReadOnlyRepository
{
TEntity GetById<TEntity>(object id) { .... }
TEntity GetBy<TEntity>(Expression<Func<TEntity, bool>> expression) { .... }
在 AddFetchEntityStep 中,我进行检查以了解 Get 调用的内容,例如
public void AddFetchEntityStep (Expression<Func<TEntity, URequest, bool>> expression = null)
{
if (expression == null )
{
_repo.GetById<TEntity>(1)
}
else
{
_repo.GetBy(.....) //// The problem
}
}
我知道它们是两个不同的签名
Expression<Func<TEntity,bool>> 和 Expression<Func<TEntity, TRequest, bool>>
【问题讨论】:
-
其余代码是什么样的?
-
“转换”是什么意思?这是两个不同的方法签名。如果要使用第二个,请将其分配给接受
TEntity参数并返回bool的表达式。
标签: c# .net lambda .net-core expression-trees