假设我有这个函数可以向我的查询添加一个简单的过滤器:
public static IQueryable<MyType> FilterSpecificParam(this IQueryable<MyType> query, string param)
{
var req = query.Where(c =>
(!(param == null || param.Trim() == "") && c.SpecificColumn.StartsWith(param))
|| ((param == null || param.Trim() == "")));
return req;
}
我会这样使用它:
SomeQueryOnMyTable.FilterSpecificParam(MyFilter)
现在,我不想为我要设置的每个过滤器重复这样的功能!所以,我发现我可以这样写我的查询:
SomeQueryOnMyTable.FilterGenericParam(MyFilter, c => c.TheColumnIWantToTest))
我的函数有这个原型:
public static IQueryable<MyType> Filter(this IQueryable<MyType> query, string param, Func<MyType, string> predicate)
问题: 我无法掌握该列的值:
public static IQueryable<MyType> Filter(this IQueryable<MyType> query, string param, Func<MyType, string> predicate)
{
var req = query.Where(c =>
(!(param == null || param.Trim() == "") && predicate.Invoke(What???).StartsWith(param))
|| ((param == null || param.Trim() == "")));
return req;
}
注意上面代码中的predicate.Invoke:它要求一个MyType类型的参数。
我希望它采用前面查询(SomeQueryOnMyTable)的参数,但我不知道如何做到这一点......知道吗?
编辑:也许有更好的方法来做这个通用过滤器功能,我最终会接受它作为答案