代码之家  ›  专栏  ›  技术社区  ›  Tony

C#表达式字符串.IndexOf属性选择器不区分大小写

c#
  •  0
  • Tony  · 技术社区  · 7 年前

    String.Contains 方法。如何将其更改为不区分大小写?像是在 Expression tree for String.IndexOf method 但到目前为止,我还不知道如何将代码调整为我的代码。有什么帮助吗?

    public class testItem
    {
        public string SomeProperty { get; set; }
    }
    
    public static IQueryable<testItem> PropertyContainsNEW<testItem>(this IQueryable<testItem> source,
                                                                    Expression<Func<testItem, string>> selector,
                                                                    string value)
    {
        ParameterExpression parameter = Expression.Parameter(typeof(testItem), "x");
        Expression property = Expression.Property(parameter, ((MemberExpression)selector.Body).Member.Name);
        var search = Expression.Constant(value, typeof(string));
    
        MethodInfo method = typeof(string).GetMethod("Contains", new[] { typeof(string) });
        var containsMethodExp = Expression.Call(property, method, search);
    
        var predicate = Expression.Lambda<Func<testItem, bool>>(containsMethodExp, parameter);
    
        return source.Where(predicate);
    }
    
    1 回复  |  直到 7 年前
        1
  •  0
  •   Alexandru Clonțea    7 年前

    为了使用 StringComparison

    这是你需要的吗?:

    public static IQueryable<testItem> PropertyContainsNEW(this IQueryable<testItem> source,
            Expression<Func<testItem, string>> selector,
            string value)
    {
       var parameter = Expression.Parameter(typeof(testItem), "x");
       var property = Expression.Property(parameter, ((MemberExpression)selector.Body).Member.Name);
       var search = Expression.Constant(value, typeof(string));
    
       var parms = new Expression[] { search,
                Expression.Constant(StringComparison.OrdinalIgnoreCase) };
    
       var method = typeof(string).GetMethod("Contains", new[] { typeof(string), typeof(StringComparison) });
       var containsMethodExp = Expression.Call(property, method, parms);
    
       var predicate = Expression.Lambda<Func<testItem, bool>>(containsMethodExp, parameter);
    
       return source.Where(predicate);
    }