我想为方法调用Contains创建动态Lambda表达式以获取字符串值列表,下面的代码工作正常,但不能忽略的字符串区分大小写
ParameterExpression parameter = Expression.Parameter(typeof(E), "x");
IQueryable<E> itemsToFilter = null; //this parameter set from input parameters
parameterName = "Name"; //this parameter set from input parameters
var prop = typeof(E).GetProperty(parameterName, BindingFlags.SetProperty | BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.Instance);
MemberExpression propertyExp=Expression.Property(param, parameterName);
var genericListType = typeof(List<>).MakeGenericType(typeof(string));
IList tmplist = (IList)Activator.CreateInstance(genericListType);
foreach (var obj in orcond.Values)
{
tmplist.Add(obj);
}
methodin = tmplist.GetType().GetMethod("Contains");
var list = Expression.Constant(tmplist);
var containsMethodExpin = Expression.Call(list, methodin, propertyExp);
comparison = Expression.Lambda<Func<E, bool>>(containsMethodExpin, parameter)
itemsToFilter.Where(comparison);
注意,以上代码仅适用于IQueryable实体框架,但不适用于C#列表
然后我想将列表中的字符串与IgnoreCase进行比较
我想用Contains
呼叫StringComparer.OrdinalIgnoreCase
,但使用时>]
获取Contains。methodin = typeof(List<string>).GetMethod("Contains", new Type[] { typeof(string), typeof(IEqualityComparer<string>) });
'methodin'返回null请帮助如何在正确使用反射的情况下通过IEqualityComparer
我想为方法调用创建动态Lambda表达式包含字符串值列表,以下代码工作正常,但未被忽略,字符串区分大小写ParameterExpression参数= ...
要使用EqualityComparer
参数查找“包含”方法,可以执行:
MethodInfo Method = null;
foreach (var m in typeof(Enumerable).GetMethods())
{
if (m.Name == "Contains" && m.GetParameters().Length == 3)
{
Method = m.MakeGenericMethod(typeof(string));
}
}