方法,返回类型为“”;表达式”;

本文关键字:表达式 返回类型 方法 | 更新日期: 2023-09-27 18:21:17

是否可以创建一个返回lambda表达式的方法?我找不到合适的例子。

当然,以下语法不起作用。这只是想把我的想法形象化一点:

// Executed code
var filteredList = listWithNames.Where(GetLambdaExpression("Adam"));
// method
public Expression GetLambdaExpression(string name)
{
    return listElement => listElement.Name == name;
}

方法,返回类型为“”;表达式”;

您可以创建返回表达式的函数,例如谓词生成器中的一个简单示例:

public static Expression<Func<T, bool>> True<T>() { return param => true; }

或者这个表达式生成器:

static Expression<T> Compose<T>(this Expression<T> first, Expression<T> second, Func<Expression, Expression, Expression> merge)
        {
                      var map = first.Parameters
                .Select((f, i) => new { f, s = second.Parameters[i] })
                .ToDictionary(p => p.s, p => p.f);
             var secondBody = ParameterRebinder.ReplaceParameters(map, second.Body);
             return Expression.Lambda<T>(merge(first.Body, secondBody), first.Parameters);
        }

在你的例子中,你应该使用Leppie在下面提到的(我已经投了赞成票)

<Func<TypeOflistElement,bool>>
public Expression<Func<TypeOflistElement,bool>> GetLambdaExpression(string name)
{
    return listElement => listElement.Name == name;
}

您可以像这样返回Func<bool, T>类型的

// Executed code
var filteredList = listWithNames.Where(GetLambdaExpression("Adam"));
// method
public Func<bool, ListElementTypeName> GetLambdaExpression(string name)
{
    return listElement => listElement.Name == name;
}

但我不明白你到底想用它做什么。

您必须返回Func<>因为IEnumerable期望一个,就像在您的示例中一样:

 public Func<String,Bool> (string name){..}

IEnumerable<T>的Where方法需要Func<T, bool>方法的委托,因此GetLambdaExpression()必须返回Func<T, bool>

其中IQueryable<T>的方法需要Expression<Func<T, bool>>,所以GetLambdaExpression()必须返回Expression<Func<T, bool>>

通过调用CCD_ 11方法,可以将CCD_。