Используйте лямбду, которую поставил Джон Скит. Возможно, он также может объяснить, почему ParameterExpression
является настолько болезненным для использования и требует использования того же самого экземпляра, вместо возможности сопоставления по имени:)
Изменить эту строку:
Type[] exprArgTypes = { query.ElementType };
exprArgTypes
- это параметры типа для
IQueryable<TSource> Where<TSource>(this IQueryable<TSource> source, Expression<Func<TSource, bool>> predicate).
Как видите, он имеет только один тип параметра - TSource
, который равен Purchase
. То, что вы делали, фактически вызывало метод Where
с двумя параметрами типа, как показано ниже:
IQueryable<Purchase> Where<Purchase, bool>(this IQueryable<Purchase> source, Expression<Func<Purchase, bool>> predicate)
Как только оба эти исправления в выражении, запускаются без проблем.