小编wlf*_*84k的帖子

如何在c#中构建不区分大小写的强类型LINQ查询?

我尝试为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)

c# linq dynamic case-insensitive strong-typing

5
推荐指数
1
解决办法
4451
查看次数

标签 统计

c# ×1

case-insensitive ×1

dynamic ×1

linq ×1

strong-typing ×1