gpt4 book ai didi

c# - "Incorrect number of parameters supplied for lambda declaration"创建 Lambda 表达式

转载 作者:行者123 更新时间:2023-11-30 22:28:37 27 4
gpt4 key购买 nike

我们创建了这个 LinqExtension 类来为 Linq 提供 Like 方法。 Contains 对我们没有用,因为我们想进行类似“%a%b%”的搜索,在 StackOverFlow 中,我们发现几篇文章使用 SqlFunction 类中的方法 PatIndex 来使用 Entity Framework。

为了保持干净的代码和易于重用,我们正在尝试做一个扩展方法来封装 PatIndex 调用

public static IQueryable<TSource> WhereLike<TSource>(
this IQueryable<TSource> source,
Expression<Func<TSource, string>> valueSelector,
string value
)
{
return source.Where(BuildLikeExpression(valueSelector, value));
}

public static Expression<Func<TElement, bool>> BuildLikeExpression<TElement>(
Expression<Func<TElement, string>> valueSelector,
string value
)
{
if (valueSelector == null)
throw new ArgumentNullException("valueSelector");

var method = GetLikeMethod(value);

var body = Expression.Call(method, valueSelector.Body, Expression.Constant(value));

var parameter = valueSelector.Parameters.Single();
var expressionConvert = Expression.Convert(Expression.Constant(0), typeof(int?));
return Expression.Lambda<Func<TElement, bool>> (Expression.GreaterThan(body, expressionConvert));
}

private static MethodInfo GetLikeMethod(string value)
{
var methodName = "PatIndex";
Type stringType = typeof(SqlFunctions);
return stringType.GetMethod(methodName);
}

问题是当我们调用这个新方法时,我们在

得到错误 为 lambda 声明提供的参数数量不正确
return Expression.Lambda<Func<TElement, bool>> (Expression.GreaterThan(body, expressionConvert));

我们缺少什么才能正确地做到这一点?

最佳答案

你快到了。

调用表达式的参数顺序错误,需要将参数传递给 Expression.Lambda:

public static Expression<Func<TElement, bool>> BuildLikeExpression<TElement>( Expression<Func<TElement, string>> valueSelector, string value )
{
if ( valueSelector == null )
throw new ArgumentNullException( "valueSelector" );

var method = GetLikeMethod( value );

var body = Expression.Call( method, Expression.Constant( value ), valueSelector.Body );

var parameter = valueSelector.Parameters.Single();
var expressionConvert = Expression.Convert( Expression.Constant( 0 ), typeof( int? ) );

return Expression.Lambda<Func<TElement, bool>>( Expression.GreaterThan( body, expressionConvert ), parameter );
}

关于c# - "Incorrect number of parameters supplied for lambda declaration"创建 Lambda 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10685385/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com