我尝试为IQuerable构建扩展方法,如下所示:
public static IQueryable<T> FilterByString<T>(this IQueryable<T> query,
Expression<Func<T, string>> propertySelector,
StringOperator operand,
string value)
Run Code Online (Sandbox Code Playgroud)
这将概括如下:
query.Where(o => o.Name.ToLower().StartsWith(filterObject.Name.ToLower()))
Run Code Online (Sandbox Code Playgroud)
成:
q.FilterByString(o => o.Name, filterObject.NameOperator, filterObject.Name)
Run Code Online (Sandbox Code Playgroud)
允许设置过滤运算符(即EndsWith,Contains).
我在google上看到了一些区分大小写的解决方案,需要使用属性的名称作为字符串而不是stron类型的propertySelectorExpression.我也看到使用IndexOf()的不敏感的Contains()实现的解决方案,它们似乎不符合我的需要.
现在我有这个,但它不起作用(在"ToLower()"调用上激动):
static MethodInfo miTL = typeof(String).GetMethod("ToLower", System.Type.EmptyTypes);
static MethodInfo miS = typeof(String).GetMethod("StartsWith", new Type[] { typeof(String) });
static MethodInfo miC = typeof(String).GetMethod("Contains", new Type[] { typeof(String) });
static MethodInfo miE = typeof(String).GetMethod("EndsWith", new Type[] { typeof(String) });
public static IQueryable<T> FilterByString<T>(this IQueryable<T> query,
Expression<Func<T, string>> propertySelector,
StringOperator operand,
string value)
{
Expression constExp = …Run Code Online (Sandbox Code Playgroud)