以下是我的代码以获取DeadLetterErrors
,这有助于为列表过滤提供Expression<Func<T,bool>>
,现在,我需要按如下方式创建Func<T,bool>
(在代码中):
MemberExpression
MemberExpression memberExpressionColumn = Expression.Property(parameterType,"X");
是要过滤的属性的名称,因此当我将其应用于X
时,很容易用属性List<Person>
替换X
, 但是当我使用Name
作为来源时,如何创建List<string>
,这会导致异常
MemberExpression
答案 0 :(得分:1)
据我了解,您需要获得如下结果:
var result = nameList.Where(obj => personNameHashset.Contains(obj));
由于您无需从字符串中获取Name
属性,因此不应该使用memberExpressionColumn
,而可以使用containsMethodInfo
来调用ParameterExpression parameterType
。您可以简化方法来像这样获得Expression<Func<T, bool>>
public static Expression<Func<T, bool>> EqualExpression<T>(this HashSet<string> nameHashSet)
{
ParameterExpression parameterType = Expression.Parameter(typeof(T), "obj");
var containsMethodInfo = typeof(StringListExtensions).GetMethod("Contains", new[] { typeof(string), typeof(HashSet<string>) });
ConstantExpression constant = Expression.Constant(nameHashSet, typeof(HashSet<string>));
var resultExpression = Expression.Call(null, containsMethodInfo, parameterType, constant);
return Expression.Lambda<Func<T, bool>>(resultExpression, parameterType);
}
并调用它:
var finalExpression = personNameHashset.EqualExpression<string>();
var finalFunc = finalExpression.Compile();
var result = nameList.Where(finalFunc);