2
我們創建了此LinqExtension類以向Linq提供Like方法。包含對我們沒有用處,因爲我們想要執行像「%a%b%」這樣的搜索,在StackOverFlow中,我們發現了幾個使用SqlFunction類中的方法PatIndex與Entity Framework一起完成的文章。「爲lambda聲明提供的參數數量不正確」創建Lambda表達式
要保持乾淨的代碼和易於重複使用,我們正在嘗試做一個擴展方法來封裝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);
}
的問題是,當我們把這種新的方法,我們得到錯誤的對提供的參數數量不正確拉姆達聲明在
return Expression.Lambda<Func<TElement, bool>> (Expression.GreaterThan(body, expressionConvert));
什麼是我們缺少做正確嗎?
它的工作原理!謝謝你的幫助! –
不客氣:) –