Напишите ваш метод, чтобы взять ExpressionLambda
, который представляет ссылку на поле:
public static IQueryable<Item> WithMatchingItemValues(this IQueryable<Item> items,
IEnumerable<Parameter> itemValues,
Expression<Func<Item,string>> field)
Затем в коде, который должен ссылаться на поле, используйте метод LINQKit Invoke
:
case WildCardStartsWith startsWith:
predicate = predicate.Or(s => field.Invoke(s).ToUpper().StartsWith(startsWith.ToString()));
Наконец, используйте метод LINQKit Expand
для встроенного расширения ссылок field
или используйте AsExpandable
, как у вас в источнике данных:
if (exactMatches.Any())
predicate = predicate.Or(s => exactMatches.Select(p => p.Value).Contains(field.Invoke(s).ToUpper()));
return items.AsExpandableEFCore().Where(predicate);