Выражение для фильтрации данных на основе свойства, представляющего собой список строк - PullRequest
0 голосов
/ 23 ноября 2018

У меня есть следующий код:

case FilterQueryType.Contains:
      var parameterExp = Expression.Parameter(type, "type");
      var propertyExp = Expression.Property(parameterExp, filter.PropertyName);
      var containsConstExp = Expression.Constant(filter.MyKeyword);
      MethodInfo method = typeof(string).GetMethod("Contains", new []{typeof(string)});
      var containsMethodExp = Expression.Call(propertyExp, method, containsConstExp);
      var containsLambda = Expression.Lambda<Func<T, bool>>(containsMethodExp, parameterExp);
      items = items.Where(containsLambda);
      break;

Этот код работает нормально, пока filter.PropertyName является строкой.Теперь у меня есть случай, когда filter.PropertyName на самом деле перечислимый из строк.

Может кто-нибудь сказать мне, как я могу создать правильное выражение для этого?(само filter.MyKeyword всегда будет одним значением)

1 Ответ

0 голосов
/ 26 ноября 2018
 MemberExpression memberExpression = Expression.Property(parameterExp, filter.PropertyName);
 Expression convertExpression = Expression.Convert(memberExpression, typeof(List<string>));
 MethodCallExpression containsExpression = Expression.Call(convertExpression, "Contains", new Type[] { }, constExpr);
 lambda = Expression.Lambda<Func<T, bool>>(containsExpression, parameterExp);
 items = items.Where(lambda);

Это решение работает для меня

...