【发布时间】:2019-01-18 22:16:14
【问题描述】:
我有以下类和扩展方法来调用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);
}
【问题讨论】:
-
您希望在结果查询执行中不区分大小写?如果是这样,您的问题还不清楚。
-
是的,我提供集合,选择一个属性并提供一个要比较的字符串
-
referencesource.microsoft.com/#mscorlib/system/string.cs,2172 为什么你需要 Contains 而不是仅仅使用 IndexOf 来达到你的目的?
-
区分大小写通常是数据库实例设置。例如,Sql Server 在安装过程中默认使用不区分大小写的排序规则。
-
@AlexandruClonțea 这就是重点,我需要在这里使用 IndexOf 和 StringComparison.OrdinalIgnoreCase 选项
标签: c#